Last active
October 20, 2023 05:33
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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