{"action":"created","issue":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/517","labels_url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/517/labels{/name}","comments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/517/comments","events_url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/517/events","html_url":"https://github.com/spring-cloud/spring-cloud-netflix/pull/517","id":105323596,"number":517,"title":"Added support for Spectator and Atlas, deprecated Servo","user":{"login":"jkschneider","id":1697736,"avatar_url":"https://avatars.githubusercontent.com/u/1697736?v=3","gravatar_id":"","url":"https://api.github.com/users/jkschneider","html_url":"https://github.com/jkschneider","followers_url":"https://api.github.com/users/jkschneider/followers","following_url":"https://api.github.com/users/jkschneider/following{/other_user}","gists_url":"https://api.github.com/users/jkschneider/gists{/gist_id}","starred_url":"https://api.github.com/users/jkschneider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkschneider/subscriptions","organizations_url":"https://api.github.com/users/jkschneider/orgs","repos_url":"https://api.github.com/users/jkschneider/repos","events_url":"https://api.github.com/users/jkschneider/events{/privacy}","received_events_url":"https://api.github.com/users/jkschneider/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/milestones/12","html_url":"https://github.com/spring-cloud/spring-cloud-netflix/milestones/1.1.0","labels_url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/milestones/12/labels","id":1182344,"number":12,"title":"1.1.0","description":"","creator":{"login":"dsyer","id":124075,"avatar_url":"https://avatars.githubusercontent.com/u/124075?v=3","gravatar_id":"","url":"https://api.github.com/users/dsyer","html_url":"https://github.com/dsyer","followers_url":"https://api.github.com/users/dsyer/followers","following_url":"https://api.github.com/users/dsyer/following{/other_user}","gists_url":"https://api.github.com/users/dsyer/gists{/gist_id}","starred_url":"https://api.github.com/users/dsyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dsyer/subscriptions","organizations_url":"https://api.github.com/users/dsyer/orgs","repos_url":"https://api.github.com/users/dsyer/repos","events_url":"https://api.github.com/users/dsyer/events{/privacy}","received_events_url":"https://api.github.com/users/dsyer/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":42,"state":"open","created_at":"2015-06-26T09:44:01Z","updated_at":"2015-10-22T21:28:38Z","due_on":null,"closed_at":null},"comments":9,"created_at":"2015-09-08T08:05:32Z","updated_at":"2015-10-26T00:31:22Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/pulls/517","html_url":"https://github.com/spring-cloud/spring-cloud-netflix/pull/517","diff_url":"https://github.com/spring-cloud/spring-cloud-netflix/pull/517.diff","patch_url":"https://github.com/spring-cloud/spring-cloud-netflix/pull/517.patch"},"body":"There is a lot going on here, so some explanation is in order.  Expect a few more commits (docs, starter, etc) after you have a chance to provide feedback.\r\n\r\n**Purpose** -  Servo is internally considered a legacy library at Netflix now, though not exactly deprecated just yet.  Current and future work should be directed at Spectator instead.  I also wish to add support for the Atlas metrics backend.  Atlas provides a unique stack language for generating real-time graphics from your metrics.  Since Atlas is a tag-based rather than hierarchical metrics backend, it provides a unique capability to Spring Cloud developers.\r\n\r\n**Assorted Details**\r\n1.  Spectator is compiled against Java 8.  This leaves me a little unclear as to whether or not we should fully remove the Servo behavior.  This is why you also see the bulk of the code in its own module.  The approach is intended to mirror the one you took with turbine-amqp.\r\n2.  The current Servo behavior appears to be quite dangerous.  While I haven't spent the time digging up the exact root cause, `DefaultServoMetricNaming`'s prepending of \"servo.\" on the front of metric names (that may have already been prepended with \"servo.\") seems to be periodically leading to a combinatorial explosion of metric names and a subsequent OOM.  For this reason and because we don't want to have two auto-configurations adding monitors to the Servo monitor registry, this PR puts `ServoMetricsAutoConfiguration` behind an explicit `@EnableServo` annotation.\r\n3.  The Atlas integration provides a `Exporter` implementation so that the developer can fully control when metrics are pushed to the backend.\r\n4.  `SpectatorMetricServices` is written against the new `CounterService`/`GaugeService` API rather than `MetricWriter`.  I'm only half sure this is the right idea.\r\n5.  `SpectatorMetricReader` attempts to map the tag-based Spectator/Servo metrics onto a naming scheme that looks decent in the /metrics endpoint.\r\n6.  Once Spring Boot is on Java 8, we can add a default method to `ClientHttpRequestInterceptor` to fetch the parameterized URI and do away with the AspectJ silliness you find in `RestTemplateUrlTemplateCapturingAspect`.\r\n\r\nCheers!\r\n"},"comment":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/comments/150991815","html_url":"https://github.com/spring-cloud/spring-cloud-netflix/pull/517#issuecomment-150991815","issue_url":"https://api.github.com/repos/spring-cloud/spring-cloud-netflix/issues/517","id":150991815,"user":{"login":"jkschneider","id":1697736,"avatar_url":"https://avatars.githubusercontent.com/u/1697736?v=3","gravatar_id":"","url":"https://api.github.com/users/jkschneider","html_url":"https://github.com/jkschneider","followers_url":"https://api.github.com/users/jkschneider/followers","following_url":"https://api.github.com/users/jkschneider/following{/other_user}","gists_url":"https://api.github.com/users/jkschneider/gists{/gist_id}","starred_url":"https://api.github.com/users/jkschneider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkschneider/subscriptions","organizations_url":"https://api.github.com/users/jkschneider/orgs","repos_url":"https://api.github.com/users/jkschneider/repos","events_url":"https://api.github.com/users/jkschneider/events{/privacy}","received_events_url":"https://api.github.com/users/jkschneider/received_events","type":"User","site_admin":false},"created_at":"2015-10-26T00:31:22Z","updated_at":"2015-10-26T00:31:22Z","body":"This branch has gotten too messy and stale, closing and will reopen a new PR."}}