Ask me anything
Ithy Logo
Sign in to save

Comprehensive Diagnostic Script for macOS on Apple Silicon

Ensure Optimal System Performance and Network Stability

macbook pro diagnostic tools

Key Takeaways

  • Automated Monitoring: Continuously checks system versions, network health, connection stability, and resource usage.
  • Comprehensive Logging: Generates detailed logs and reports to aid in troubleshooting and performance analysis.
  • Apple Silicon Optimization: Specifically tailored for macOS running on Apple Silicon chips, ensuring compatibility and efficiency.

Introduction

In today's fast-paced digital environment, maintaining optimal system performance and ensuring network stability are paramount, especially for developers and IT professionals. macOS devices powered by Apple Silicon chips offer remarkable performance and efficiency, but they also require precise monitoring to harness their full potential. This comprehensive diagnostic script is designed to provide continuous monitoring of key system and network parameters, ensuring that your macOS system operates seamlessly.

Core Purpose

The primary objective of this diagnostic tool is to offer a robust solution for monitoring and diagnosing system and network-related issues on macOS devices equipped with Apple Silicon chips. By focusing on network connectivity, stability, and crucial system resources, the script ensures that any anomalies are promptly detected and addressed.

Main Components

1. Automated Version Checking

Keeping software tools up-to-date is essential for security, performance, and compatibility. This component validates the versions of installed tools against recommended configurations, alerting users to any discrepancies.

  • Version Validation: Ensures that all critical tools meet the required version standards.
  • Alerts on Mismatches: Notifies users when a tool is outdated or not compliant with the recommended version.

2. Network Health Monitoring

Network connectivity and stability are crucial for seamless operations. This component conducts various checks to assess the health of the network infrastructure.

  • Gateway Connectivity: Tests the reachability of the default gateway to ensure uninterrupted internet access.
  • DNS Resolution: Verifies the ability to resolve domain names, preventing issues related to domain name system failures.
  • Route Stability: Monitors the stability of routing paths to detect any route conflicts or changes.
  • Connection Loss Rates: Tracks the frequency of connection drops to identify potential network reliability issues.

3. Resource Monitoring

Efficient resource utilization is vital for maintaining system performance. This component monitors various system resources to ensure they are operating within optimal parameters.

  • Container Statistics: If Docker is installed, it monitors container performance and resource usage.
  • VM Disk Space and Memory: Tracks the usage of virtual machine disk space and memory to prevent bottlenecks.
  • Host System Resources: Monitors CPU, memory, and disk usage on the host system to ensure balanced resource allocation.

How It Works

The diagnostic script operates by running continuous checks at predefined intervals, ensuring real-time monitoring and prompt detection of issues. The script is designed to execute autonomously, minimizing the need for manual intervention.

Check Intervals

The script performs various checks at the following intervals:

Check Type Interval
Version Checks Every 5 minutes
Network Health Checks Every 30 seconds
Connection Monitoring Every 5 seconds
Resource Monitoring Every 2 minutes

Continuous Monitoring Loop

The script employs a continuous loop that triggers each monitoring function based on the specified intervals. This ensures that the system is consistently evaluated for any deviations from normal operating conditions.

Output

Upon execution, the script generates a timestamped directory that houses all logs and reports. This organized structure facilitates easy access and review of diagnostic data.

  • Separate Log Files: Each check type has its dedicated log file, ensuring clarity and ease of analysis.
  • Main Log: Provides an overarching overview of the system's status, consolidating information from all individual checks.
  • Final Markdown Report: Summarizes the findings in a user-friendly format, highlighting key metrics and any detected issues.

Script Implementation

The script is crafted in Bash, leveraging native macOS commands and utilities to perform the necessary diagnostics. It is optimized for Apple Silicon chips, ensuring seamless performance and compatibility.

Prerequisites

  • Bash Shell: The script is written in Bash and requires a Unix-like shell environment.
  • Permissions: Ensure the script has execute permissions using chmod +x script.sh.
  • Dependencies: Tools like Docker (optional) should be installed if container monitoring is desired.

Script Breakdown

1. Configuration

Define the script version, log directory, and check intervals. This section ensures that all parameters are centralized for easy adjustments.

SCRIPT_VERSION="1.0"
LOG_DIR="$(date +%Y%m%d%H%M%S)_diagnostics"
CHECK_INTERVALS=(300 30 5 120) # In seconds: version, network, connection, resources

2. Create Log Directory and Files

Establish a dedicated directory for logs, ensuring that all diagnostic data is systematically stored.

mkdir -p "$LOG_DIR"
VERSION_LOG="$LOG_DIR/version_checks.log"
NETWORK_LOG="$LOG_DIR/network_checks.log"
CONNECTION_LOG="$LOG_DIR/connection_checks.log"
RESOURCE_LOG="$LOG_DIR/resource_checks.log"
MAIN_LOG="$LOG_DIR/main.log"

3. Helper Functions

Define functions to log messages and perform specific diagnostic tasks. This modular approach enhances readability and maintainability.

a. Logging Function
log_message() {
    local log_file="$1"
    local message="$2"
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $message" >> "$log_file"
}
b. System Version and Chip Check
check_system() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - System Information:" >> "$VERSION_LOG"
    system_profiler SPHardwareDataType | grep "Chip" >> "$VERSION_LOG"
    sw_vers >> "$VERSION_LOG"
}
c. Network Health Check
check_network() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Network Check:" >> "$NETWORK_LOG"
    # DNS Resolution
    dig google.com | grep "Query time" >> "$NETWORK_LOG"
    # Default Gateway
    netstat -nr | grep default >> "$NETWORK_LOG"
    # Active Network Interfaces
    ifconfig | grep "status\|inet " >> "$NETWORK_LOG"
}
d. Connection Stability Monitoring
check_connection() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Connection Check:" >> "$CONNECTION_LOG"
    ping -c 1 8.8.8.8 | grep "time=" >> "$CONNECTION_LOG"
}
e. Resource Monitoring
check_resources() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Resource Check:" >> "$RESOURCE_LOG"
    # CPU Usage
    top -l 1 | grep "CPU usage" >> "$RESOURCE_LOG"
    # Memory Usage
    vm_stat >> "$RESOURCE_LOG"
    # Disk Space Usage
    df -h >> "$RESOURCE_LOG"
    # Docker Containers (if installed)
    if command -v docker >/dev/null; then
        docker stats --no-stream >> "$RESOURCE_LOG"
    fi
}
f. Report Generation
generate_report() {
    cat << EOF > "$LOG_DIR/report.md"
# Diagnostic Report
Generated: $(date '+%Y-%m-%d %H:%M:%S')

## System Information
\`\`\`
$(tail -n 10 "$VERSION_LOG")
\`\`\`

## Network Status
\`\`\`
$(tail -n 10 "$NETWORK_LOG")
\`\`\`

## Connection Stability
\`\`\`
$(tail -n 10 "$CONNECTION_LOG")
\`\`\`

## Resource Usage
\`\`\`
$(tail -n 15 "$RESOURCE_LOG")
\`\`\`
EOF
}

4. Detect Apple Silicon

detect_apple_silicon() {
    if [[ $(sysctl -n machdep.cpu.brand_string) == *"Apple"* ]]; then
        log_message "$MAIN_LOG" "Apple Silicon detected."
    else
        log_message "$MAIN_LOG" "Apple Silicon NOT detected. Exiting script."
        exit 1
    fi
}

5. Main Execution

Initialize the diagnostic process by setting up directories, verifying the system architecture, and entering the continuous monitoring loop.

log_message "$MAIN_LOG" "Starting Diagnostic Script..."
detect_apple_silicon

# Trap to generate report on exit
trap 'echo "Stopping diagnostics..."; generate_report; exit' INT TERM

# Continuous Monitoring Loop
echo "Starting diagnostic monitoring..."
while true; do
    current_time=$(date +%s)

    # Version checks (every 5 minutes)
    if (( current_time % ${CHECK_INTERVALS[0]} == 0 )); then
        check_system &
        log_message "$MAIN_LOG" "Performed system version check."
    fi

    # Network checks (every 30 seconds)
    if (( current_time % ${CHECK_INTERVALS[1]} == 0 )); then
        check_network &
        log_message "$MAIN_LOG" "Performed network health check."
    fi

    # Connection checks (every 5 seconds)
    if (( current_time % ${CHECK_INTERVALS[2]} == 0 )); then
        check_connection &
        log_message "$MAIN_LOG" "Performed connection stability check."
    fi

    # Resource checks (every 2 minutes)
    if (( current_time % ${CHECK_INTERVALS[3]} == 0 )); then
        check_resources &
        log_message "$MAIN_LOG" "Performed resource usage check."
    fi

    sleep 1
done

Key Features

  • Connection Loss Calculation: Determines the percentage of connection losses to evaluate network reliability.
  • Network Route Conflict Detection: Identifies any conflicts or changes in network routing that could disrupt connectivity.
  • Development Tool Version Validation: Ensures that all development tools adhere to recommended version standards, preventing compatibility issues.
  • Comprehensive System Resource Monitoring: Provides detailed insights into CPU, memory, disk, and container resource usage.

Enhancements and Customizations

While the script is designed to cover fundamental diagnostic checks, it can be customized to incorporate additional functionalities based on specific needs:

  • Notification Integrations: Implement email or messaging notifications to alert users of critical issues in real-time.
  • Extended Tool Validation: Add checks for more development tools or applications pertinent to your workflow.
  • Advanced Reporting: Incorporate graphical representations of logs for a more intuitive analysis.

Best Practices

  • Regular Script Updates: Periodically update the script to incorporate new diagnostic checks or improvements.
  • Secure Log Storage: Ensure that log directories are stored securely to prevent unauthorized access to sensitive information.
  • Resource Management: Monitor the resource consumption of the diagnostic script itself to ensure it does not interfere with system performance.

Troubleshooting

In case of issues with the diagnostic script, consider the following troubleshooting steps:

  • Permission Errors: Ensure that the script has execute permissions and the necessary access rights to perform system checks.
  • Dependency Issues: Verify that all required tools and commands are installed and accessible in the system's PATH.
  • Log File Inspection: Review the main and individual log files to identify any error messages or anomalies.

Conclusion

This comprehensive diagnostic script serves as a powerful tool for maintaining and enhancing the performance and reliability of macOS systems running on Apple Silicon chips. By automating essential checks and providing detailed logs and reports, it empowers users to proactively identify and address potential issues, ensuring a smooth and efficient computing experience.

References

For further assistance or to customize the script to better fit your specific needs, feel free to reach out or consult the referenced documentation.


Last updated January 19, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI