Add tech_docs/linux_motd.md

This commit is contained in:
2024-10-15 09:20:27 +00:00
parent 4651b69472
commit a362b95ce6

131
tech_docs/linux_motd.md Normal file
View File

@@ -0,0 +1,131 @@
Excellent! Let's fine-tune and expand on the system resource monitor idea, as it provides a great opportunity to learn about Linux system operations, bash scripting, and Python data processing. We'll create a more comprehensive script that monitors system resources over time and provides useful insights.
Here's an enhanced version of the system resource monitor:
```bash
#!/bin/bash
# Function to collect system data
collect_data() {
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}' | sed 's/%//')
io_wait=$(iostat -c 1 2 | tail -n 2 | head -n 1 | awk '{print $4}')
load_avg=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ')
echo "$cpu_usage,$mem_usage,$disk_usage,$io_wait,$load_avg,$(date +%s)"
}
# Collect data every 5 seconds for 1 minute
for i in {1..12}; do
collect_data >> system_data.csv
sleep 5
done
# Process data with Python
python3 - << EOF
import pandas as pd
import matplotlib.pyplot as plt
from io import StringIO
# Read the CSV data
df = pd.read_csv('system_data.csv', header=None,
names=['CPU', 'Memory', 'Disk', 'IO_Wait', 'Load_Avg', 'Timestamp'])
# Convert timestamp to datetime
df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='s')
# Calculate averages
averages = df.mean()
print("System Resource Usage Summary:")
print(f"Average CPU Usage: {averages['CPU']:.2f}%")
print(f"Average Memory Usage: {averages['Memory']:.2f}%")
print(f"Average Disk Usage: {averages['Disk']:.2f}%")
print(f"Average I/O Wait: {averages['IO_Wait']:.2f}%")
print(f"Average Load Average: {averages['Load_Avg']:.2f}")
# Check for high usage
high_usage = df[(df['CPU'] > 80) | (df['Memory'] > 80) | (df['Disk'] > 80)]
if not high_usage.empty:
print("\nHigh Usage Detected:")
print(high_usage)
# Plot the data
plt.figure(figsize=(12, 8))
plt.plot(df['Timestamp'], df['CPU'], label='CPU')
plt.plot(df['Timestamp'], df['Memory'], label='Memory')
plt.plot(df['Timestamp'], df['Disk'], label='Disk')
plt.plot(df['Timestamp'], df['IO_Wait'], label='I/O Wait')
plt.plot(df['Timestamp'], df['Load_Avg'], label='Load Average')
plt.title('System Resource Usage Over Time')
plt.xlabel('Time')
plt.ylabel('Usage (%)')
plt.legend()
plt.grid(True)
plt.savefig('system_usage.png')
plt.close()
print("\nPlot saved as system_usage.png")
# Identify the most variable metric
variances = df.var()
most_variable = variances.idxmax()
print(f"\nMost variable metric: {most_variable}")
EOF
# Clean up
rm system_data.csv
```
This enhanced script does the following:
1. Collects more system metrics: CPU usage, memory usage, disk usage, I/O wait time, and load average.
2. Samples data every 5 seconds for a minute, storing it in a CSV file.
3. Uses Python with pandas for data analysis:
- Calculates average usage for each metric
- Detects periods of high usage
- Creates a time series plot of all metrics
- Identifies the most variable metric
To run this script:
1. Save it as `system_monitor.sh`
2. Make it executable: `chmod +x system_monitor.sh`
3. Run it: `./system_monitor.sh`
This script provides valuable insights into Linux system operations:
1. **Command-line tools**:
- `top`: for CPU usage
- `free`: for memory statistics
- `df`: for disk usage
- `iostat`: for I/O statistics
- `uptime`: for load average
2. **Bash scripting**:
- Functions in bash
- Looping and timing operations
- Text processing with `awk`, `sed`, `cut`
3. **Python data analysis**:
- Using pandas for data manipulation
- matplotlib for data visualization
- Time series analysis
4. **System metrics understanding**:
- CPU usage patterns
- Memory utilization
- Disk space monitoring
- I/O wait time implications
- Load average interpretation
To further expand your learning:
1. Try running this script under different system loads (e.g., while running a big compilation job).
2. Modify the script to monitor specific processes instead of the whole system.
3. Extend the Python analysis to provide recommendations based on the observed patterns.
4. Add network usage monitoring using tools like `netstat` or `ss`.
Would you like me to explain any part of this script in more detail or suggest ways to extend it further?