Enable RUM on Kloudfuse for Google GCS :: Kloudfuse Docs

Enable RUM on Kloudfuse for Google GCS

Create Session Replay

You can store RUM session recordings in a GCS Bucket. Follow these steps to create this bucket, and note the GCS bucket name and the credential (secretKey):

  1. Create a new bucket.
  2. Create a service account on GCP IAM that has access to the bucket.
  3. Create a new key under this service account. This creates and downloads a credential file.
  4. Rename this local credential file to secretKey.
  5. Save for following tasks this information:

Create Secret for Kloudfuse Namespace

Run the following command in the cluster that runs Kloudfuse:

Create a Secret for Kloudfuse Namespace

kubectl create secret generic kfuse-rum-gcs --from-file=./secretKey

Copied!

Configure the custom-values.yaml File

  1. Generate a UUID by running the following command:
uuidgen | tr 'A-Z' 'a-z'

Copied!

You must reference this UUID in the Kloudfuse frontend SDK initialization call.
  1. Add a global.rum section to the custom-values.yaml file:
     rum:
       enabled: true
       applications:
      - name: kf-frontend
        id: 944f6a58-dbc2-45ad-bf93-def505aaff62

sessionReplayStorage:
      type: gcs
      useSecret: true
      secretName: kfuse-rum-gcs (1)
      gcs:
        bucket: rum-session-replay-playground (2)

yamlCopied!

1 secretName: Secret created in Create Secret for Kloudfuse Namespace](https://docs.kloudfuse.com/platform/3.2.5/rum-enable-google-gcs/#step2).
2 bucket: GCS bucket created for session replay storage, in Create Session Replay](https://docs.kloudfuse.com/platform/3.2.5/rum-enable-google-gcs/#step1).
  1. List RUM-specific Kafka topics in the custom-values.yaml file. Use the configuration for the events stream as a reference for the number of replicas and partitions.
    - name: kf_rum_session_replay_topic
      partitions: 3
      replicationFactor: 2
    - name: kf_rum_views_topic
      partitions: 3
      replicationFactor: 2
    - name: kf_rum_actions_topic
      partitions: 3
      replicationFactor: 2
    - name: kf_rum_resources_topic
      partitions: 3
      replicationFactor: 2
    - name: kf_rum_longtasks_topic
      partitions: 3
      replicationFactor: 2
    - name: kf_rum_errors_topic
      partitions: 3
      replicationFactor: 2

yamlCopied!

  1. Specify the TLS configuration in the tls section of the custom-values.yaml file, and ensure you use a public host.
tls:
     enabled: true (1)
     host: playground.kloudfuse.io (2)
     email: admin@kloudfuse.com
     clusterIssuer: playground-letsencrypt-prod

yamlCopied!

1 enabled: true: Enable TLS.
2 host: playground.kloudfuse.io: This host is public.
  1. Specify the Ingress configuration in the ingress section of the custom-values.yaml file. RUM must have a public ingest endpoint where the frontend browser posts data.
ingress:
     controller:
       service:
         external:
           enabled: true (1)
         externalTrafficPolicy: Local (2)

yamlCopied!

1 Enable external ingress policy
2 Enable and specify external traffic policy.
  1. Enable RUM in the ingester section of the custom-values.yaml file:
ingester:
     config:
       rum:
         enabled: true
         # you can ignore the datadog section below from the PR since
         # this is the default
         datadog:
           proxyToDatadogEnabled: false

yamlCopied!

  1. To ingest frontend logs into Kloudfuse, add parsing rules in the log-parser section of the custom-values.yaml file. Include these rules verbatim, along with existing rules.
      - remap:
          args:
            kf_additional_tags:
              - "$origin"
              - "$application_id"
              - "$session_id"
              - "$view.id"
              - "$view.url"
              - "$view.referrer"
              - "$error.handling"
              - "$error.kind"
              - "$error.stack"
              - "$error.message"
              - "$http.method"
              - "$http.status_code"
              - "$http.url"
          conditions:
            - matcher: "__kf_agent"
              value: "datadog"
              op: "=="
      - transform:
          args:
            - action: "replace"
            - sourceLabels: "#ddsource"
            - targetLabel: "source"
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "error.kind"
            - facetName: "error_kind"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "error.stack"
            - facetName: "error_stack"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "error.message"
            - facetName: "error_message"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "http.method"
            - facetName: "@http_method"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "http.status_code"
            - facetName: "http_status_code"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "http.url"
            - facetName: "http_url"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "session_id"
            - facetName: "sessionid"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "application_id"
            - facetName: "applicationid"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "view.url"
            - facetName: "view_url"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "view.referrer"
            - facetName: "view_referrer"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "view.id"
            - facetName: "view_id"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "error.handling"
            - facetName: "@error_handling"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="
      - moveLabelToFacet:
          args:
            - name: "origin"
            - facetName: "event_origin"
            - agentFacet: true
          conditions:
            - matcher: "#__kf_ddrum"
              value: "true"
              op: "=="

yamlCopied!

  1. Enable RUM in the ui section of the custom-values.yaml file:
ui:
     config:
       rum:
         enabled: true

yamlCopied!

  1. Upgrade the cluster using these changes, and ensure that all pods are active.

Instrument the Frontend Application

To set up the Frontend SDK for RUM, see instructions in RUM Setup. Here is guide to the parameters to configure for SDK initialization:

Enable Authenticated Ingestion

(Optional)

By default, this feature is disabled.

When you enable authenticated ingestion on the Kloudfuse platform, you must enable it globally, and add authentication tokens.

Follow these steps:

  1. To enable ingestion authentication, set global authConfig to true in the custom-values.yaml file:

Enable Ingestion Authentication

global:
     authConfig:
       enabled: true (1)

yamlCopied!

1 authConfig: enable
  1. Generate a new authentication token:

Generate token

uuidgen | tr -d '-' | tr 'A-Z' 'a-z' | sed 's/^/pub/'

Copied!

  1. Configure one or more client tokens in the ingester config rum section of the custom-values.yaml file:

Configure tokens

ingester:
     config:
       rum:
         enabled: true (1)
         clientTokens: (2)
        - rumauthkey1: <unique authtoken value>
        - rumauthkey2: <unique authtoken value>

yamlCopied!

1 enabled: Enable RUM ingestion
2 clientTokens``rumauthkey1 and rumauthkey2: Unique authentication tokens for RUM, generated in Generate token.
  1. Match the generated auth tokens to the clientToken value in the frontend RUM SDK configuration:
kfuseRumSDK.init({
       config: {
           applicationId: '<application id>', (1)
           clientToken: '<unique authtoken value>', (2)
           ...
       }
})

javascriptCopied!

1 applicationId: The identifier of the service that provides the RUM stream.
2 clientToken: Unique authentication token for RUM, generated in Generate token, matching the declarations in Configure tokens.