For example, can I run a full node, connect to some 8 peers, and measure my uplink and downlink bandwidth to each of my peers?
You can to a limited degree with custom software, but ultimately the data you would get is noisy and not particularly useful. A number of years ago I was crawling the Bitcoin network to get estimations of the speeds that nodes could attain by connecting, downloading a known quantity of blocks, and measuring the time it took. This makes assumptions about the nodes you are connecting to being otherwise idle, and therefor only gives you a lower bound of what their line speed might be. It isn’t an intended function of the network in any case.