zking2000 / NotePad

1 stars 0 forks source link

Appd checking #52

Open zking2000 opened 2 weeks ago

zking2000 commented 2 weeks ago

#!/bin/bash

# Check if email address is provided
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <your-email@example.com>"
    exit 1
fi

# Set SSH user from command line argument
SSH_USER="$1"

# Set project ID list
PROJECTS=("project1" "project2" "project3")

# Set Google Cloud Storage bucket name
BUCKET_NAME="your-bucket-name"

# Get current timestamp
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

# Create temporary file to store results
TEMP_FILE="/tmp/appd_check_results_$TIMESTAMP.json"

# Initialize JSON array
echo "[" > $TEMP_FILE

# Iterate through all projects
for PROJECT in "${PROJECTS[@]}"; do
    echo "Checking instances in project: $PROJECT"

    # Get all instances in the project
    INSTANCES=$(gcloud compute instances list --project $PROJECT --format="csv[no-heading](name,zone,networkInterfaces[0].accessConfigs[0].natIP)")

    # Check each instance
    while IFS=',' read -r INSTANCE_NAME ZONE IP_ADDRESS; do
        echo "Checking instance: $INSTANCE_NAME in zone: $ZONE"

        # Check AppDynamics agent status
        STATUS=$(ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SSH_USER@$IP_ADDRESS" "pgrep -f appdynamics > /dev/null && echo 'Running' || echo 'Not Running'" 2>/dev/null)

        # Mark status as "Unknown" if SSH connection fails
        if [ $? -ne 0 ]; then
            STATUS="Unknown (SSH Failed)"
        fi

        # Add result to JSON
        echo "  {" >> $TEMP_FILE
        echo "    \"instance_name\": \"$INSTANCE_NAME\"," >> $TEMP_FILE
        echo "    \"project\": \"$PROJECT\"," >> $TEMP_FILE
        echo "    \"zone\": \"$ZONE\"," >> $TEMP_FILE
        echo "    \"ip_address\": \"$IP_ADDRESS\"," >> $TEMP_FILE
        echo "    \"appd_status\": \"$STATUS\"," >> $TEMP_FILE
        echo "    \"check_time\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\"" >> $TEMP_FILE
        echo "  }," >> $TEMP_FILE
    done <<< "$INSTANCES"
done

# Remove the last comma and close JSON array
sed -i '$ s/,$//' $TEMP_FILE
echo "]" >> $TEMP_FILE

# Upload results to Google Cloud Storage
gsutil cp $TEMP_FILE gs://$BUCKET_NAME/appd_check_results_$TIMESTAMP.json

echo "Check completed. Results saved to gs://$BUCKET_NAME/appd_check_results_$TIMESTAMP.json"

# Clean up temporary file
rm $TEMP_FILE
zking2000 commented 2 weeks ago
from google.cloud import compute_v1
from google.cloud import logging_v2

def check_appdynamics_status():
    compute_client = compute_v1.InstancesClient()
    logging_client = logging_v2.Client()

    # 获取项目ID
    project_id = 'your-project-id'  # 替换为你的项目ID

    # 获取所有实例
    request = compute_v1.ListInstancesRequest(project=project_id, zone='-')
    instances = compute_client.list(request=request)

    for instance in instances:
        print(f"Checking AppDynamics status on instance: {instance.name}")

        # 构造日志过滤器
        filter_str = f'resource.type="gce_instance" AND resource.labels.instance_id="{instance.id}" AND textPayload:"AppDynamics"'

        # 查询日志
        entries = logging_client.list_entries(project_ids=[project_id], filter_=filter_str)

        # 检查最新的日志条目
        latest_entry = next(entries, None)
        if latest_entry:
            print(f"Latest AppDynamics log: {latest_entry.payload}")
        else:
            print("No AppDynamics logs found")

        print("------------------------")

if __name__ == "__main__":
    check_appdynamics_status()