В прошлом я использовал счетчики производительности для записи того, что происходит с данным приложением, но все зависит от того, какие данные вы хотите и как вы в конечном итоге интерпретируете эту информацию, но это другой вопрос.
Я предлагаю вам создать отдельную библиотеку, которую вы можете загрузить из любого приложения, которое будет запускаться в своем собственном потоке, контролирующем подключенную к нему систему. Вы должны позволить изменить частоту, с которой поток проверяет счетчики производительности, так как вы действительно не хотите выпускать dll, если обнаружите, что этот поток загружает процессор.
Возможно, вы уже знаете о пространстве имен System.Diagnostics, где вы можете найти все счетчики, которые вам могут понадобиться! Очевидно, что нет ничего, что могло бы помешать вам регистрировать эти данные, как только они будут собраны, в БД по вашему выбору.
Надеюсь, это немного поможет.