Hello DevOps Enthusiasts! π
Welcome to Day 10 of our 90 Days of DevOps challenge! Today, we'll learn how to analyze logs and create reports using a simple Bash script. Let's dive in! π
π Scenario :
Imagine you're a system administrator responsible for several servers. Each server keeps a daily record called a "log file," where it writes down what happens throughout the day β like important events or errors. Your job is to read these logs, find specific events, and create a summary report. Let's make it easy! π
π οΈ Steps to Complete the Task :
Collect Log Files π
- Gather all the log files from your servers.
Analyze Log Files π
- Look through each log file to find things like errors or other important events.
Generate a Report π
- Make a summary report that lists these events clearly.
π Example
1. Collect Log Files π
Server 1:
server1_log.txt
Server 2:
server2_log.txt
Server 3:
server3_log.txt
2. Analyze Log Files π
Search each log file for lines that have words like "ERROR."
3. Generate a Report π
Summary Report for Today
========================
Server 1:
- ERROR: Failed to connect to database at 10:00 AM
Server 2:
- ERROR: Disk space low at 2:00 PM
Server 3:
- ERROR: Network timeout at 1:30 PM
π‘οΈ Explanation
1. List of Log Files
log_files=("server1_log.txt" "server2_log.txt" "server3_log.txt")
We create a list of our log files. Each item in the list is the name of a log file from different servers.
2. Create an Empty Report File
report_file="summary_report.txt"
echo "Summary Report for Today" > $report_file
echo "========================" >> $report_file
echo "" >> $report_file
We set up a new file called summary_report.txt
where we will store our final report. We start with a title and some formatting.
3. Function to Analyze Each Log File
analyze_log_file() {
local file_name=$1
echo "$file_name:" >> $report_file # Write the server's log file name to the report
while IFS= read -r line; do # Read each line in the log file
if [[ "$line" == *"ERROR"* ]]; then # If the line contains "ERROR"
echo "- $line" >> $report_file # Write it to the report
fi
done < "$file_name" # Read from the log file
echo "" >> $report_file # Add a blank line after each file's entries
}
This function (analyze_log_file
) reads each line of a log file. If a line contains the word "ERROR," it adds that line to our report.
4. Loop Through Log Files and Analyze
for log_file in "${log_files[@]}"; do
analyze_log_file $log_file
done
We go through each log file in our list (log_files
) and use our function (analyze_log_file
) to process it.
5. Print the Summary Report
cat $report_file
Finally, we display our complete summary report using cat
.
πCombine Everything :
Putting it all together, we get the complete script:
#!/bin/bash
# List of log files
log_files=("server1_log.txt" "server2_log.txt" "server3_log.txt")
# Create an empty report file
report_file="summary_report.txt"
echo "Summary Report for Today" > $report_file
echo "========================" >> $report_file
echo "" >> $report_file
# Function to analyze each log file
analyze_log_file() {
local file_name=$1
echo "$file_name:" >> $report_file
# Read each line of the log file
while IFS= read -r line; do
# Check if the line contains "ERROR"
if [[ "$line" == *"ERROR"* ]]; then
echo "- $line" >> $report_file
fi
done < "$file_name" # Read from the log file
echo "" >> $report_file # Add a blank line after each file's entries
}
# Loop through each log file and analyze it
for log_file in "${log_files[@]}"; do
analyze_log_file $log_file
done
# Print the summary report
cat $report_file
πCongratulations! π
We have successfully learned how to use Bash scripting to analyze log files and create a summary report.πͺ
Stay tuned for more exciting tasks in our 90 Days of DevOps challenge.
Happy learning! π