Skip to content

Traceable On-Prem Alerts Runbook

This runbook provides guidance for responding to alerts from the Traceable Platform monitoring system.

Overview

The Traceable Platform includes built-in monitoring with Prometheus and AlertManager. This runbook covers common alerts, their causes, and mitigation steps.


SEV1 Alerts (Critical)

KubePersistentVolumeFillingUp

Severity: CRITICAL

Alert Rule:

(kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytes) < 0.03

Description: Persistent volume is running out of space (less than 3% available).

Impact: Services may fail to write data, causing data loss or service outages.

Mitigation Steps:

  1. Identify the affected PVC:

    • Navigate to TI → Namespaces → Browser → PVC
    • Find the PVC mentioned in the alert
  2. Check current utilization:

kubectl exec -it -n traceable <pod-name> -- df -h <mount-path>
  1. Analyze disk usage in Grafana:

    • Dashboard: "Kubernetes / Persistent Volumes"
    • Dashboard: "Pinot Query Ingestion" (for Pinot volumes)
  2. Increase PVC size:

    • Navigate to TI → Namespace → Browser → PVC
    • Click edit icon on the affected PVC
    • Increase the storage value
    • Save changes

Escalation: If mitigation fails, collect Grafana metrics, thread dumps, and logs for Traceable support.


OldGenGCOverhead

Severity: CRITICAL

Alert Rule:

delta(java_lang_g1_old_generation_collectiontime{pod=~"pinot-.*"}[1m]) > 15000
for: 5m

Description: High Old Generation GC overhead in Pinot components for more than 5 minutes.

Causes:

  • Complex regex queries
  • Large time range queries with filters/group by
  • Memory-intensive operations

Impact: Platform slowness, query timeouts, potential service instability.

Mitigation Steps:

  1. Identify problematic queries:

    • Check Pinot Broker and Server logs
    • Look for long-running or complex queries
  2. Restart affected pods:

kubectl rollout restart statefulset -n traceable pinot-broker
kubectl rollout restart statefulset -n traceable pinot-server
  1. If issue persists:
    • Increase Pinot memory limits
    • Review and optimize problematic queries

Escalation: Collect Grafana metrics, thread dumps, and Pinot logs.


PinotServerHighCPUUsage

Severity: CRITICAL

Alert Rule:

sum by (namespace, pod) (container_cpu_usage) > sum by (namespace, pod) (kube_pod_container_resource_requests{container="pinot-server"})
for: 15m

Description: Pinot server CPU usage exceeds requested resources for 15+ minutes.

Causes:

  • Increased ingestion traffic
  • Lag in upstream services (e.g., trace-enricher)
  • Complex query processing

Mitigation Steps:

  1. Check for upstream lag:

    • Review "Kafka Stream Applications" Grafana dashboard
  2. Increase resources:

    • Navigate to TI → Helm Releases → Search for Pinot
    • Update user/values.yaml:
    hypertrace-pinot:
      server:
        replicaCount: 4
        resources:
          limits:
            cpu: 2
            memory: 9Gi
          requests:
            cpu: 1
    
    • Save and run Helm Upgrade
  3. Scale horizontally if vertical scaling is insufficient.


PinotKafkaConsumerError / PinotKafkaConsumerLag

Severity: CRITICAL

Description: Pinot is experiencing Kafka consumer errors or significant lag.

Mitigation Steps:

  1. Check Kafka connectivity:
kubectl exec -it -n traceable pinot-server-0 -- nc -zv kafka 9092
  1. Review consumer lag in Grafana:

    • Dashboard: "Kafka Stream Applications"
  2. Restart Pinot consumers if needed:

kubectl rollout restart statefulset -n traceable pinot-server
  1. Generate support bundle:
name: CollectLogs
namespaces:
  - match:
      filter: "traceable"
    logs:
      - pod:
          filter: "pinot-*"
      - pod:
          filter: "kafka*"

SEV2 Alerts (Warning)

PodOutOfMemory

Alert Rule:

kube_pod_container_status_last_terminated_reason{reason="OOMKilled"} > 0

Description: Pod was terminated due to Out of Memory (OOM) condition.

Mitigation Steps:

  1. Identify the pod:
kubectl get pods -n traceable | grep -i oom
kubectl describe pod <pod-name> -n traceable
  1. Check memory usage:
kubectl top pod <pod-name> -n traceable
  1. Increase memory limits:

    • Navigate to TI → Helm Releases → Find the service
    • Update memory limits in user/values.yaml
    • Run Helm Upgrade
  2. Monitor after changes:

    • Verify pod stability
    • Check memory usage trends in Grafana

KubePodCrashLooping

Description: Pod is repeatedly crashing and restarting.

Mitigation Steps:

  1. Check pod status and events:
kubectl get events -n traceable | grep <pod-name>
kubectl describe pod <pod-name> -n traceable
  1. Check logs:
kubectl logs <pod-name> -n traceable --previous
  1. Common causes:

    • OOM kills (exit code 137)
    • Health check failures
    • Configuration errors
    • Dependency unavailable
  2. Generate support bundle:

name: generic-pod-restart
namespaces:
  - match:
      filter: "traceable"
    logs:
      - pod:
          filter: "<pod-name>*"

PodRestarted

Alert Rule:

delta(kube_pod_container_status_restarts_total[6h]) > 5

Description: Pod has restarted more than 5 times in 6 hours.

Mitigation Steps:

  1. Check pod events:
kubectl get events -n traceable | grep <pod-name>
kubectl describe pod <pod-name> -n traceable
  1. Analyze restart reasons:

    • Exit code 137: OOM kill
    • Exit code 1: Application error
    • Probe failures: Health check issues
  2. Review logs from previous instance:

kubectl logs <pod-name> -n traceable --previous

Pinot Offline Segment Delay

Alert Names:

  • metricView_OFFLINE-pinot-offline-segment-delay
  • serviceCallView_OFFLINE-pinot-offline-segment-delay
  • domainEventView_OFFLINE-pinot-offline-segment-delay
  • (and other table variants)

Alert Rule:

max by (table) (pinot_controller_validation_offlinesegmentdelayhours_value) > 60

Description: Pinot offline table watermark is behind by more than 60 hours.

Impact:

  • Historical queries may return incomplete results
  • Must be resolved within 3 days to prevent data loss

Mitigation Steps:

  1. Generate support bundle:
name: CollectLogs
namespaces:
  - match:
      filter: "traceable"
    logs:
      - pod:
          filter: "pinot-*"
      - pod:
          filter: "zookeeper*"
  1. Contact Traceable support with the bundle.

connect-task-failure

Alert Rule:

sum by (connector) (kafka_connect_connect_worker_metrics_connector_failed_task_count) > 0

Description: Kafka Connect task has failed.

Mitigation Steps:

  1. Check connector status:
curl -s http://kafka-connect.traceable.svc:8083/connectors | jq
  1. Get detailed status:
curl -s http://kafka-connect.traceable.svc:8083/connectors/<connector-name>/status | jq
  1. Restart failed tasks:
curl -X POST http://kafka-connect.traceable.svc:8083/connectors/<connector-name>/tasks/0/restart
  1. Generate support bundle:
name: kafka-connect-bundle
namespaces:
  - match:
      filter: "traceable"
    logs:
      - pod:
          filter: "kafka-connect-*"

EntityCreationThresholdExceeded

Alert Names:

  • ApiEntityCreationThresholdExceeded
  • DomainEntityCreationThresholdExceeded
  • ServiceEntityCreationThresholdExceeded
  • BackendEntityCreationThresholdExceeded

Alert Rule:

max by (tenantId) (entities_count{entityType="DOMAIN"}) > 100000

Description: More than 100,000 entities created in a category.

Mitigation Steps:

  1. Check entity counts:
kubectl exec -it -n traceable mongo-primary-0 -- mongo default_db --quiet --eval "
  print('DOMAIN: ' + db.raw_entities.count({entityType: 'DOMAIN'}));
  print('API: ' + db.raw_entities.count({entityType: 'API'}));
  print('SERVICE: ' + db.raw_entities.count({entityType: 'SERVICE'}));
"
  1. Contact Traceable support for entity cleanup guidance.

HighUnsuccessfulResponseCodeIntegrationService

Alert Rule:

sum by (statusCode) (delta(grpc_server_processing_duration_seconds_count{app="integration-service",statusCode!="OK"}[1h])) > 10

Description: Integration service has more than 10 unsuccessful calls in the past hour.

Mitigation Steps:

  1. Check integration-service pods:
kubectl get pods -n traceable -l app=integration-service
kubectl logs -n traceable -l app=integration-service --tail=100
  1. Review integration configurations (WAF, Jira, SIEM, etc.)

  2. Generate support bundle:

name: integration-service
namespaces:
  - match:
      filter: "traceable"
    logs:
      - pod:
          filter: "integration-service*"

How to Silence an Alert

  1. Open AlertManager UI:

    • Navigate to TI → Monitoring → AlertManager
    • Or access directly: https://<platform-dns>/alertmanager
  2. Select the alert(s) you want to silence

  3. Click "Silence"

  4. Set duration:

    • 1h for 1 hour
    • 1d for 1 day
    • 1w for 1 week
  5. Create the silence

The silence will automatically expire after the specified duration.


Generating Support Bundles

For escalation to Traceable support, generate a support bundle:

  1. Navigate to TI → Tasks → Support Bundle

  2. Use appropriate YAML configuration (examples provided in each alert section)

  3. Download and share the generated bundle with support



Support

For alert assistance, contact: support@harness.io

Provide the following information:

  • Alert name and details
  • Support bundle
  • Grafana screenshots
  • Timeline of events