you can do all this by:
- using google analytics module (it covers basic tracking, tracking clicks in external links, file downloads, you can also use it to pass tokens into custom variables)
- you should add javascript to your node type of choice to add events when clicking in internal links
actually, at the moment, best approach would be to go with Google Tag Manager, where you can enable click tracking in all elements and pick in GTM, which one should be tracked.
take a look at following modules:
https://www.drupal.org/project/google_tag
https://www.drupal.org/project/datalayer
First one installs GTM on your page, second one enables passing many variables and taxonomies to be passed to dataLayer. It also has an alter function, if you'd like to add some extra data (since the module is written in a general way and i.e. extracting taxonomies from json arrays on the GTM side can be complicated).
WARNING! keep in mind, that GA has a limit of events sent during one session, and for one user per day. First one is 500, second one AFAIK is around 200k. It might look that it's more than enough, but if you plan to track no of displays for many elements, you'd use up all your "event credits" right a way - another caveat is, that after the page load, you have a credit of 10-12 events, and each second it adds 2 tokens - it's an DDoS mechanism implemented on server side in GA.
So... what you're describing is more of a adserver mechanism where you want to measure click through rate (CTR) of your "promotional banners" - even if it's a node teaser, if you want to measure CTR, you should think about it as a banner.
Another way to measure it (clicks only) is to add a suffix to node link, which would later on allow on identifying where click came from, but you can also do this with standard reports on a page level, where you can check navigation summary for each page - it won't be as precise to tell you that specific teaser was clicked, but you'll know previous page.