As we are rolling out the user profile feature, we'd like to expand the [Usage API](https://www.elastic.co/guide/en/elasticsearch/reference/current/usage-api.html) to report usage stats of user profiles such as (1) number of enabled user profiles and (2) number of user profiles that are [activated](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-activate-user-profile.html) over the past X days. 

Response of the Usage API already contains a `security` field that groups relevant stats from security related features. We expect the new stats for user profiles should be added under it as well, for example:
```
{
  "security: {
    "user_profile": {
      "activated": 78,
      "recently_activated": 42  <1>
    }
  }
}
```
<1> The use of `recently_` is chosen to avoid the field to be tied to a specific time period so it is easier to evolve the definition in future.

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/profile/ProfileServiceTests.java
final PlainActionFuture<ResultsAndErrors<Map.Entry<String, Subject>>> future = new PlainActionFuture<>();
        profileService.getProfileSubjects(allProfileUids, future);
        ResultsAndErrors<Map.Entry<String, Subject>> resultsAndErrors = future.get();
        verify(profileIndex).checkIndexVersionThenExecute(any(Consumer.class), any(Runnable.class));
        assertThat(resultsAndErrors.errors().size(), equalTo(missingProfileUids.size()));
        resultsAndErrors.errors().forEach((uid, e) -> {
            assertThat(missingProfileUids, hasItem(uid));
            assertThat(e, instanceOf(ResourceNotFoundException.class));
        });
        assertThat(resultsAndErrors.results().size(), is(allProfileUids.size() - missingProfileUids.size()));
        for (Map.Entry<String, Subject> profileIdAndSubject : resultsAndErrors.results()) {
            assertThat(allProfileUids, hasItem(profileIdAndSubject.getKey()));
            assertThat(missingProfileUids, not(hasItem(profileIdAndSubject.getKey())));
            assertThat(profileIdAndSubject.getValue().getUser().principal(), is("foo_username_" + profileIdAndSubject.getKey()));
            assertThat(profileIdAndSubject.getValue().getUser().roles(), arrayWithSize(1));
            assertThat(profileIdAndSubject.getValue().getUser().roles()[0], is("foo_role_" + profileIdAndSubject.getKey()));
        }
    }
    @SuppressWarnings("unchecked")
    public void testGetProfileSubjectWithFailures() throws Exception {
        final ElasticsearchException mGetException = new ElasticsearchException("mget Exception");
        doAnswer(invocation -> {
            assertThat(
                threadPool.getThreadContext().getTransient(ACTION_ORIGIN_TRANSIENT_NAME),
                equalTo(minNodeVersion.onOrAfter(Version.V_8_3_0) ? SECURITY_PROFILE_ORIGIN : SECURITY_ORIGIN)
            );
            final ActionListener<MultiGetResponse> listener = (ActionListener<MultiGetResponse>) invocation.getArguments()[2];
            listener.onFailure(mGetException);
            return null;
        }).when(client).execute(eq(MultiGetAction.INSTANCE), any(MultiGetRequest.class), anyActionListener());