Rather than use expect why not setup an ssh trust from your local user to the admin user on each of your $HOSTS? By doing that you can run ssh without it prompting for password. This is more secure because it means you don't have to store the password in clear text in your expect script. It will also let you save the output of ssh:
Code:
for i in $HOSTS
do
DATE=`date +%Y-%m-%d`
ssh admin@$i 'egrep $DATE /var/log' >> ./$DATE.log
done
In the above the items between single quotes are what you're telling the remote host to do. I also changed your ">" to ">>" because the single one would overwrite $DATE.log on each host whereas the double one appends the next host's output to the one(s) previously done.
What are your target hosts? On Linux /var/log is usually a directory so your egrep wouldn't find anything as is.
Also as an FYI the use of `<cmd>` is deprecated. You should get in the habit of using $(<cmd>) instead e.g.
DATE=$(date +%Y-%m-%d)
One main benfeit of the newer form is you can nest things more easily. It also eliminates confusion when reading your scripts between ` and '.