Your first loop will scan through the entire file. You start from the top again the second time you open it.
If your logfile consistently contains three line entries, you could loop on the date regex and then
readline() in the next two lines, parse all three at the same time, then loop back up again. The pointer will follow your place in the file and you'll be right at the next timestamp entry.
open file;
while(<file>) {
my $line1 = $_;
my $line2 = readline(<file>);
my $line3 = readline(<file>);
#handle $line1, $line2, $line3 all at once then
#loop up for the next entry
}