aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md306
1 files changed, 306 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..0859e7db
--- /dev/null
+++ b/README.md
@@ -0,0 +1,306 @@
+# OpenCensus - A stats collection and distributed tracing framework
+[![Gitter chat][gitter-image]][gitter-url]
+[![Maven Central][maven-image]][maven-url]
+[![Javadocs][javadoc-image]][javadoc-url]
+[![Build Status][travis-image]][travis-url]
+[![Windows Build Status][appveyor-image]][appveyor-url]
+[![Coverage Status][codecov-image]][codecov-url]
+
+
+OpenCensus is a toolkit for collecting application performance and behavior data. It currently
+includes 3 apis: stats, tracing and tags.
+
+The library is in [Beta](#versioning) stage and APIs are expected to be mostly stable. The
+library is expected to move to [GA](#versioning) stage after v1.0.0 major release.
+
+Please join [gitter](https://gitter.im/census-instrumentation/Lobby) for help or feedback on this
+project.
+
+## OpenCensus Quickstart for Libraries
+
+Integrating OpenCensus with a new library means recording stats or traces and propagating context.
+For application integration please see [Quickstart for Applications](https://github.com/census-instrumentation/opencensus-java#quickstart-for-applications).
+
+The full quick start example can also be found on the [OpenCensus website](https://opencensus.io/java/index.html).
+
+### Add the dependencies to your project
+
+For Maven add to your `pom.xml`:
+```xml
+<dependencies>
+ <dependency>
+ <groupId>io.opencensus</groupId>
+ <artifactId>opencensus-api</artifactId>
+ <version>0.16.1</version>
+ </dependency>
+</dependencies>
+```
+
+For Gradle add to your dependencies:
+```gradle
+compile 'io.opencensus:opencensus-api:0.16.1'
+```
+
+For Bazel add the following lines to the WORKSPACE file:
+```
+maven_jar(
+ name = "io_opencensus_opencensus_api",
+ artifact = "io.opencensus:opencensus-api:0.15.0",
+ sha1 = "9a098392b287d7924660837f4eba0ce252013683",
+)
+```
+Then targets can specify `@io_opencensus_opencensus_api//jar` as a dependency to depend on this jar:
+```bazel
+deps = [
+ "@io_opencensus_opencensus_api//jar",
+]
+```
+You may also need to import the transitive dependencies. See [generate external dependencies from
+Maven projects](https://docs.bazel.build/versions/master/generate-workspace.html).
+
+### Hello "OpenCensus" trace events
+
+Here's an example of creating a Span and record some trace annotations. Notice that recording the
+annotations is possible because we propagate scope. 3rd parties libraries like SLF4J can integrate
+the same way.
+
+```java
+import io.opencensus.common.Scope;
+import io.opencensus.trace.Tracer;
+import io.opencensus.trace.Tracing;
+import io.opencensus.trace.samplers.Samplers;
+
+public final class MyClassWithTracing {
+ private static final Tracer tracer = Tracing.getTracer();
+
+ public static void doWork() {
+ // Create a child Span of the current Span. Always record events for this span and force it to
+ // be sampled. This makes it easier to try out the example, but unless you have a clear use
+ // case, you don't need to explicitly set record events or sampler.
+ try (Scope ss =
+ tracer
+ .spanBuilder("MyChildWorkSpan")
+ .setRecordEvents(true)
+ .setSampler(Samplers.alwaysSample())
+ .startScopedSpan()) {
+ doInitialWork();
+ tracer.getCurrentSpan().addAnnotation("Finished initial work");
+ doFinalWork();
+ }
+ }
+
+ private static void doInitialWork() {
+ // ...
+ tracer.getCurrentSpan().addAnnotation("Important.");
+ // ...
+ }
+
+ private static void doFinalWork() {
+ // ...
+ tracer.getCurrentSpan().addAnnotation("More important.");
+ // ...
+ }
+}
+```
+
+### Hello "OpenCensus" stats events
+
+Here's an example on
+ * defining TagKey, Measure and View,
+ * registering a view,
+ * putting TagKey and TagValue into a scoped TagContext,
+ * recording stats against current TagContext,
+ * getting ViewData.
+
+
+For the complete example, see
+[here](https://github.com/census-instrumentation/opencensus-java/blob/master/examples/src/main/java/io/opencensus/examples/helloworld/QuickStart.java).
+
+```java
+import io.opencensus.common.Scope;
+import io.opencensus.stats.Aggregation;
+import io.opencensus.stats.BucketBoundaries;
+import io.opencensus.stats.Measure.MeasureLong;
+import io.opencensus.stats.Stats;
+import io.opencensus.stats.StatsRecorder;
+import io.opencensus.stats.View;
+import io.opencensus.stats.ViewData;
+import io.opencensus.stats.ViewManager;
+import io.opencensus.tags.TagKey;
+import io.opencensus.tags.TagValue;
+import io.opencensus.tags.Tagger;
+import io.opencensus.tags.Tags;
+import java.util.Arrays;
+import java.util.Collections;
+
+public final class MyClassWithStats {
+ private static final Tagger tagger = Tags.getTagger();
+ private static final ViewManager viewManager = Stats.getViewManager();
+ private static final StatsRecorder statsRecorder = Stats.getStatsRecorder();
+
+ // frontendKey allows us to break down the recorded data
+ private static final TagKey FRONTEND_KEY = TagKey.create("myorg_keys_frontend");
+
+ // videoSize will measure the size of processed videos.
+ private static final MeasureLong VIDEO_SIZE =
+ MeasureLong.create("my.org/measure/video_size", "size of processed videos", "By");
+
+ // Create view to see the processed video size distribution broken down by frontend.
+ // The view has bucket boundaries (0, 256, 65536) that will group measure values into
+ // histogram buckets.
+ private static final View.Name VIDEO_SIZE_VIEW_NAME = View.Name.create("my.org/views/video_size");
+ private static final View VIDEO_SIZE_VIEW =
+ View.create(
+ VIDEO_SIZE_VIEW_NAME,
+ "processed video size over time",
+ VIDEO_SIZE,
+ Aggregation.Distribution.create(
+ BucketBoundaries.create(Arrays.asList(0.0, 256.0, 65536.0))),
+ Collections.singletonList(FRONTEND_KEY));
+
+ public static void initialize() {
+ // ...
+ viewManager.registerView(VIDEO_SIZE_VIEW);
+ }
+
+ public static void processVideo() {
+ try (Scope scopedTags =
+ tagger
+ .currentBuilder()
+ .put(FRONTEND_KEY, TagValue.create("mobile-ios9.3.5"))
+ .buildScoped()) {
+ // Processing video.
+ // ...
+
+ // Record the processed video size.
+ statsRecorder.newMeasureMap().put(VIDEO_SIZE, 25648).record();
+ }
+ }
+
+ public static void printStats() {
+ ViewData viewData = viewManager.getView(VIDEO_SIZE_VIEW_NAME);
+ System.out.println(
+ String.format("Recorded stats for %s:\n %s", VIDEO_SIZE_VIEW_NAME.asString(), viewData));
+ }
+}
+```
+
+## OpenCensus Quickstart for Applications
+
+Besides recording tracing/stats events the application also need to link the implementation,
+setup exporters, and debugging [Z-Pages](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages).
+
+### Add the dependencies to your project
+
+For Maven add to your `pom.xml`:
+```xml
+<dependencies>
+ <dependency>
+ <groupId>io.opencensus</groupId>
+ <artifactId>opencensus-api</artifactId>
+ <version>0.16.1</version>
+ </dependency>
+ <dependency>
+ <groupId>io.opencensus</groupId>
+ <artifactId>opencensus-impl</artifactId>
+ <version>0.16.1</version>
+ <scope>runtime</scope>
+ </dependency>
+</dependencies>
+```
+
+For Gradle add to your dependencies:
+```gradle
+compile 'io.opencensus:opencensus-api:0.16.1'
+runtime 'io.opencensus:opencensus-impl:0.16.1'
+```
+
+For Bazel add the following lines to the WORKSPACE file:
+```
+maven_jar(
+ name = "io_opencensus_opencensus_api",
+ artifact = "io.opencensus:opencensus-api:0.15.0",
+ sha1 = "9a098392b287d7924660837f4eba0ce252013683",
+)
+
+maven_jar(
+ name = "io_opencensus_opencensus_impl_core",
+ artifact = "io.opencensus:opencensus-impl-core:0.15.0",
+ sha1 = "36c775926ba1e54af7c37d0503cfb99d986f6229",
+)
+
+maven_jar(
+ name = "io_opencensus_opencensus_impl",
+ artifact = "io.opencensus:opencensus-impl:0.15.0",
+ sha1 = "d7bf0d7ee5a0594f840271c11c9f8d6f754f35d6",
+)
+```
+Then add the following lines to BUILD.bazel file:
+```bazel
+deps = [
+ "@io_opencensus_opencensus_api//jar",
+]
+runtime_deps = [
+ "@io_opencensus_opencensus_impl_core//jar",
+ "@io_opencensus_opencensus_impl//jar",
+]
+```
+Again you may need to import the transitive dependencies. See [generate external dependencies from
+Maven projects](https://docs.bazel.build/versions/master/generate-workspace.html).
+
+### How to setup exporters?
+
+#### Trace exporters
+* [Instana][TraceExporterInstana]
+* [Jaeger][TraceExporterJaeger]
+* [Logging][TraceExporterLogging]
+* [Stackdriver][TraceExporterStackdriver]
+* [Zipkin][TraceExporterZipkin]
+
+#### Stats exporters
+* [Stackdriver][StatsExporterStackdriver]
+* [SignalFx][StatsExporterSignalFx]
+* [Prometheus][StatsExporterPrometheus]
+
+### How to setup debugging Z-Pages?
+
+If the application owner wants to export in-process tracing and stats data via HTML debugging pages
+see this [link](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages#quickstart).
+
+## Versioning
+
+This library follows [Semantic Versioning][semver].
+
+**GA**: Libraries defined at a GA quality level are stable, and will not introduce
+backwards-incompatible changes in any minor or patch releases. We will address issues and requests
+with the highest priority. If we were to make a backwards-incompatible changes on an API, we will
+first mark the existing API as deprecated and keep it for 18 months before removing it.
+
+**Beta**: Libraries defined at a Beta quality level are expected to be mostly stable and we're
+working towards their release candidate. We will address issues and requests with a higher priority.
+There may be backwards incompatible changes in a minor version release, though not in a patch
+release. If an element is part of an API that is only meant to be used by exporters or other
+opencensus libraries, then there is no deprecation period. Otherwise, we will deprecate it for 18
+months before removing it, if possible.
+
+[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master
+[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java
+[appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true
+[appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master
+[javadoc-image]: https://www.javadoc.io/badge/io.opencensus/opencensus-api.svg
+[javadoc-url]: https://www.javadoc.io/doc/io.opencensus/opencensus-api
+[maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api/badge.svg
+[maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api
+[gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg
+[gitter-url]: https://gitter.im/census-instrumentation/lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
+[codecov-image]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/graph/badge.svg
+[codecov-url]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/
+[semver]: http://semver.org/
+[TraceExporterInstana]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/instana#quickstart
+[TraceExporterJaeger]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/jaeger#quickstart
+[TraceExporterLogging]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/logging#quickstart
+[TraceExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/stackdriver#quickstart
+[TraceExporterZipkin]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/zipkin#quickstart
+[StatsExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/stackdriver#quickstart
+[StatsExporterSignalFx]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/signalfx#quickstart
+[StatsExporterPrometheus]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/prometheus#quickstart