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(randomList(1, 5, () -> randomAlphaOfLength(20)), future);
        ExecutionException e = expectThrows(ExecutionException.class, () -> future.get());
        assertThat(e.getCause(), is(mGetException));
        final Collection<String> allProfileUids = randomList(1, 5, () -> randomAlphaOfLength(20));
        final Collection<String> errorProfileUids = randomSubsetOf(allProfileUids);
        final Collection<String> missingProfileUids = Sets.difference(Set.copyOf(allProfileUids), Set.copyOf(errorProfileUids));
        doAnswer(invocation -> {
            assertThat(
                threadPool.getThreadContext().getTransient(ACTION_ORIGIN_TRANSIENT_NAME),
                equalTo(minNodeVersion.onOrAfter(Version.V_8_3_0) ? SECURITY_PROFILE_ORIGIN : SECURITY_ORIGIN)
            );
            final MultiGetRequest multiGetRequest = (MultiGetRequest) invocation.getArguments()[1];
            List<MultiGetItemResponse> responses = new ArrayList<>();
            for (MultiGetRequest.Item item : multiGetRequest.getItems()) {
                assertThat(item.index(), is(SECURITY_PROFILE_ALIAS));
                assertThat(item.id(), Matchers.startsWith("profile_"));
                if (false == errorProfileUids.contains(item.id().substring("profile_".length()))) {
                    GetResponse missingResponse = mock(GetResponse.class);
                    when(missingResponse.isExists()).thenReturn(false);
                    when(missingResponse.getId()).thenReturn(item.id());
                    responses.add(new MultiGetItemResponse(missingResponse, null));
                } else {
                    MultiGetResponse.Failure failure = mock(MultiGetResponse.Failure.class);
                    when(failure.getId()).thenReturn(item.id());
                    when(failure.getFailure()).thenReturn(new ElasticsearchException("failed mget item"));
                    responses.add(new MultiGetItemResponse(null, failure));
                }
            }
            final ActionListener<MultiGetResponse> listener = (ActionListener<MultiGetResponse>) invocation.getArguments()[2];