KB-2334 How to find logs in an Appian on Kubernetes installation

Purpose

In certain troubleshooting scenarios, it may be necessary to gather specific logs and configuration files for Appian Support. This article will help users find where the requested information inside their Appian on Kubernetes install.

For any feedback or issue related to the commands' utilization, please feel free to include in your support case. 

Instructions

Based on the requested files, please ensure the following:

  1. The user is able to access the worker nodes.
  2. The commands should be run from outside the pods. There is no need to exec into a certain pod in order to run the commands.
  3. Replace <namespace><pod-name>, <your_appian>, etc. with actual values from your environment while running the commands.

Note: Copying logs from Kubernetes pods, especially large files, may temporarily cause fluctuation to node performance. To minimize impact, consider running log collection during low-traffic periods and monitoring node resource usage while transferring large files.

Important Logs for Each Component

General Configuration Files:

Engines, Service Manager, Kafka and Zookeeper:

Appian Data Server (ADS):

Search Server:

Application Server:

RPA:

Performance Metrics:


General Configuration Files:

Note: The information equivalent to build.info, custom.properties, tomcatResources.xml, appian-topology.xml will all be included in the same command output. Only one copy of appian-cr.yaml needs to be uploaded to the support case.

build.info

  • kubectl -n <namespace> get appian <your_appian> -o yaml > appian-cr.yaml 
  • Physical file in webapp pod’s /usr/local/appian/ae/conf/

custom.properties

  • kubectl -n <namespace> get appian <your_appian> -o yaml > appian-cr.yaml
  • Physical file in webapp pod’s /usr/local/appian/ae/conf/

passwords.properties

  • Get the list of secrets in your Appian: kubectl -n <namespace> get secret
  • kubectl -n <namespace> get secret passwords-properties -o yaml > passwords-properties.yaml

tomcatResources.xml

  • kubectl -n <namespace> get appian <your_appian> -o yaml > appian-cr.yaml
  • Physical file in webapp pod’s /usr/local/appian/ae/conf/

appian-topology.xml

  • kubectl -n <namespace> get appian <your_appian> -o yaml > appian-cr.yaml
  • Physical file in webapp pod’s /usr/local/appian/ae/conf/

Engines, Service Manager, Kafka and Zookeeper:

Health & Status

  • kubectl -n <namespace> exec -it <any-engine-pod-name> -- /bin/bash -c "/usr/local/appian/ae/serviceManagerScriptWrapper.sh services/bin/status.sh -c" > service_manager_health.txt

Service Manager Logs

  • kubectl -n <namespace> get pods -o name | grep 'service-manager' | while read pod; do pod_name=${pod#pod/}; kubectl -n <namespace> cp $pod_name:/usr/local/appian/ae/logs/service_manager.log ./$pod_name.log; done && tar -cf service_manager-$(date +%Y%m%d).tar *service-manager*.log && rm -r *service-manager*.log

Engine Logs

  • kubectl -n my-appian-site get pods -o name | grep 'service-manager' | while read pod; do pod_name=${pod#pod/}; echo $pod_name; latest_db_log=$(kubectl -n my-appian-site exec "$pod_name" -- bash -c "ls -t /usr/local/appian/ae/logs/db_*.log 2>/dev/null | head -n1"); echo $latest_db_log; kubectl -n my-appian-site cp "$pod_name":/"$latest_db_log" ./logs/"$pod_name"_"$latest_log".log; done && tar -cf engine_logs-$(date +%Y%m%d).tar logs/ && rm -r logs/

Kafka Logs

  • kubectl -n <namespace> exec -it <kafka-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae && tar -cvf kafka.tar kafka/logs"
  • kubectl -n <namespace> cp <kafka-pod-name>:/usr/local/appian/ae/kafka.tar ./kafka-$(date +"%Y%m%d").tar

Zookeeper Logs

  • kubectl -n <namespace> exec -it <zookeeper-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae && tar -cvf zookeeper.tar zookeeper/logs"
  • kubectl -n <namespace> cp <zookeeper-pod-name>:/usr/local/appian/ae/zookeeper.tar ./zookeeper-$(date +"%Y%m%d").tar

Appian Data Service (ADS):

Health

  • kubectl -n <namespace> exec -it <data-server-pod-name> -- /bin/bash -c "/usr/local/appian/ae/data-server/bin/health.sh" > data-server-health.txt

ADS Logs

  • kubectl -n <namespace> exec -it <data-server-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae/logs && find data-server -type f -mtime -3 | tar -cf data-server.tar --files-from=-"
  • kubectl -n <namespace> cp <data-server-pod-name>:/usr/local/appian/ae/logs/data-server.tar data-server-$(date +"%Y%m%d").tar

Search Server:

Health

  • kubectl -n <namespace> exec -it <search-server-pod-name> -- /bin/bash -c "curl localhost:9200/_cluster/health?pretty" > search-server-health.txt

Search Server Logs

  • kubectl -n <namespace> exec -it <search-server-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae/logs && find search-server -type f -mtime -3 | tar -cf search-server.tar --files-from=-"
  • kubectl -n <namespace> cp <search-server-pod-name>:/usr/local/appian/ae/logs/search-server.tar search-server-$(date +"%Y%m%d").tar

Application Server:

Tomcat Logs

  • kubectl -n <namespace> exec -it <webapp-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae && find logs/ -type f -name 'tomcat*' -mtime -3  | tar --transform='s|^logs/|tomcat-logs/|' -cf webapp.tar --files-from=-"

RPA:

RPA Logs

  • kubectl -n <namespace> exec -it <rpa-pod-name> -- bash -c 'log_dir="/data/tomcat8/logs";catalina_log=$(ls -t $log_dir | grep "catalina" | head -1);localhost_log=$(ls -t $log_dir | grep "localhost\.[0-9]" | head -1);localhost_access=$(ls -t $log_dir | grep "localhost_access_log" | head -1);tar -cvf /tmp/rpa_logs.tar $log_dir/jidoka.log $log_dir/rtdo.log $log_dir/rpdo.log $log_dir/robotRDO.log $log_dir/$catalina_log $log_dir/$localhost_log $log_dir/$localhost_access'
  • kubectl -n <namespace> cp <rpa-pod-name>:/tmp/rpa_logs.tar rpa-$(date +"%Y%m%d").tar

Performance Metrics:

Performance Logs

  • kubectl -n <namespace> exec -it <webapp-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae/logs && find perflogs -type f -mtime -1 | tar -cf perflogs.tar --files-from=-"
  • kubectl -n <namespace> cp <webapp-pod-name>:/usr/local/appian/ae/perflogs.tar perflogs$(date +"%Y%m%d").tar

Data Metrics Logs

  • kubectl -n <namespace> exec -it <webapp-pod-name> -- /bin/bash -c "cd /usr/local/appian/ae/logs && find data-metrics-type f -mtime -1 | tar -cf data-metrics.tar --files-from=-"
  • kubectl -n <namespace> cp <webapp-pod-name>:/usr/local/appian/ae/data-metrics.tar data-metrics-$(date +"%Y%m%d").tar

Long Running Work Items Logs

  • kubectl -n <namespace> cp <webapp-pod-name>:/usr/local/appian/ae/long-running-work-items.log long-running-work-items-$(date +"%Y%m%d").log

Affected Versions

This article applies to all versions of self-managed Appian on Kubernetes.

Last Reviewed: March 2025

Related
Recommended