If you only need the number of completed downloads, just grab the raw logs from your CDN and run them through a log analysis tool. Most CDNs provide daily access logs as a standard service. The bigger players can do hourly logs or better.
The best solution will depend on your CDN, so talk to them if you haven t already. However, here s how I ve done it in the past.
To each protected download URL generated, append a unique id for the user who made the request. A typical CDN download URL might contain an expiry time and a hash to prevent tampering. You ll want to check with your CDN first to make sure you pick a variable name that doesn t clash with their API. In our case we agreed on a prefix of ign_* (meaning ignore.)
Before:
http://cdn.example.com/path/to/file.ext?e=EXPIRES&h=HASH
After:
http://cdn.example.com/path/to/file.ext?e=EXPIRES&ign_u=USERID&h=HASH
Example (download link for user 1234):
http://cdn.example.com/path/to/file.ext?e=1356088260&ign_u=1234&h=39341385b9d99730646d927f620111e1
Now when you download your raw logs, each entry can be associated with one of your users simply by parsing the query string. From here you can do everything from counting the number of completed downloads, to implementing per-user download reports.
In our case, we had logs available every 15 minutes and I automated the fetching and processing to enable byte-level per-user download quotas.
One thing to keep in mind, if you re going to be processing the logs yourself, is to group HTTP 206 partial entries together. Particularly if you re interested in the "number of completed downloads."