Skip to content

Instantly share code, notes, and snippets.

@wwwted
Last active October 20, 2023 05:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wwwted/9be7b0fe00f3849aec3fb45653b0c979 to your computer and use it in GitHub Desktop.
Save wwwted/9be7b0fe00f3849aec3fb45653b0c979 to your computer and use it in GitHub Desktop.
Script to collect logs from NDB cluster running in K8s using the NDB Operator
#!/bin/bash
# From management nodes:
# - config-ini from configmap: kubectl get configmap ndb-demo-config -n ndb-cluster -o jsonpath='{.data.config\.ini}'
# - /var/lib/ndb/data/ndb_1_cluster.log
#
# From data nodes:
# - data node log from kubectl logs
#
# From MySQL API nodes:
# - my.cnf from configmap: kubectl get configmap ndb-demo-config -n ndb-cluster -o jsonpath='{.data.my\.cnf}'
# - error log from kubectl logs
#
# View configmap: kubectl get configmap ndb-demo-config -n ndb-cluster -o jsonpath='{.data}' | jq
#
# When using our Helm chart, clusterScoped is set to true by default. If you want to run cluster in different namespace
# you need to set clusterScoped to false. This script should work for clusterScoped=true as long as you set both
# namespace variables to the same value below.
#
cluster_name="ndb-demo"
operator_ns="ndb-operator" # namespace for NDB operator
cluster_ns="ndb-cluster" # namespace for NDB cluster
kubectl config set-context --current --namespace=$cluster_ns
my_cnf_exists=$(kubectl get ndb $cluster_name -o=jsonpath='{.spec.mysqlNode.myCnf}')
log_folder=ndb_logs_`date "+20%y-%m-%d"`
mkdir -p $log_folder/mgmd
mkdir -p $log_folder/mysqld
mkdir -p $log_folder/ndbmtd
mkdir -p $log_folder/operator
# NDB Operator logs
for x in `kubectl get pods -n $operator_ns | cut -d' ' -f1 | tail -n +2`
do
kubectl logs $x -n $operator_ns >> $log_folder/operator/${x}.log
done
kubectl get ndb $cluster_name -o yaml >> $log_folder/operator/$cluster_name.yaml
# NBD Cluster logs
ndb_pods=`kubectl get pods | cut -d' ' -f1 | tail -n +2`
for pod in $ndb_pods
do
echo ""
echo "=== Collecting logs from $pod ==="
ndb_type=`echo $pod | cut -d '-' -f3`
if [[ $ndb_type == "mgmd" ]]; then
# echo "$ndb_type"
mkdir $log_folder/mgmd/$pod
kubectl get configmap $cluster_name-config -o jsonpath='{.data.config\.ini}' >> "$log_folder/mgmd/$pod/config.ini"
kubectl cp "$pod:/var/lib/ndb/data" "$log_folder/mgmd/$pod/."
elif [[ $ndb_type == "mysqld" ]]; then
# echo "$ndb_type"
mkdir $log_folder/mysqld/$pod
kubectl logs $pod >> $log_folder/mysqld/$pod/mysqld.log
if [ -z "$my_cnf_exists" ]; then
echo "NO CONFIG ADDED BY USER MYSQLD STARTED WITH DEFAULT CONFIG"
else
kubectl get configmap ${cluster_name}-config -o jsonpath='{.data.my\.cnf}' >> "$log_folder/mysqld/$pod/my.cnf"
fi
elif [[ $ndb_type == "ndbmtd" ]]; then
# echo "$ndb_type"
mkdir $log_folder/ndbmtd/$pod
kubectl logs $pod >> $log_folder/ndbmtd/$pod/out.log
else
echo "Unvalid process type ($ndb_type), skipping"
fi
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment