Report tracking is possible out of the box. There's a table called REPORTUSAGELOG that stores the report runtime history. There's a cron task (REPORTUSAGECLEANUP) that deletes any entries that exceed the threshold defined on the cron task parameter so you may need to bump that up if you want longer retention.
There's nothing out of the box for "viewing" a record. Normally, people are looking to do this when there's something confidential about the asset. One challenge you'll have is whether you consider every record returned on the list tab or in a dialog in some other application as "viewing" the record. For example, the asset MBO will be initialized inside WOTRACK. Typically, people don't want to track in these scenarios because they're not viewing the confidential portion of the asset details.
What I'd prefer to do in a scenario like this is take the confidential information about the asset and put it in a dialog. This accomplishes two goals. The first is we can tie a signature option to it easily which makes the information not accessible to those that don't need to see it. Then when someone choses to view this information, they click our action that records the history and then displays the dialog. This avoids a lot of entries in our logs and ensures we have tracking of the records when we need it. And it prevents our script from firing in the many scenarios ASSET MBOs are initialized