Add tech_docs/linux_motd.md
This commit is contained in:
131
tech_docs/linux_motd.md
Normal file
131
tech_docs/linux_motd.md
Normal 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?
|
||||
Reference in New Issue
Block a user