Skip to content

Commit

Permalink
chore: add metric sample and update READMEs throughout
Browse files Browse the repository at this point in the history
  • Loading branch information
aabmass committed Dec 20, 2022
1 parent 70da73b commit c9f6f06
Show file tree
Hide file tree
Showing 10 changed files with 268 additions and 27 deletions.
39 changes: 26 additions & 13 deletions packages/opentelemetry-cloud-monitoring-exporter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,40 @@ OpenTelemetry Google Cloud Monitoring Exporter allows the user to send collected
## Installation

```bash
npm install --save @opentelemetry/sdk-metrics-base
npm install --save @opentelemetry/sdk-metrics
npm install --save @google-cloud/opentelemetry-cloud-monitoring-exporter
```

## Usage

```js
const { MeterProvider } = require('@opentelemetry/sdk-metrics-base');
const { MetricExporter } = require('@google-cloud/opentelemetry-cloud-monitoring-exporter');

const exporter = new MetricExporter();
const { MeterProvider, PeriodicExportingMetricReader } = require("@opentelemetry/sdk-metrics");
const { MetricExporter } = require("@google-cloud/opentelemetry-cloud-monitoring-exporter");

// Create MeterProvider
const meterProvider = new MeterProvider();
// Register the exporter
const meter = new MeterProvider({
exporter,
interval: 60000,
}).getMeter('example-meter');

// Now, start recording data
const counter = meter.createCounter('metric_name');
counter.add(10, { [key]: 'value' });
meterProvider.addMetricReader(
new PeriodicExportingMetricReader({
// Export metrics every 10 seconds. 5 seconds is the smallest sample period allowed by
// Cloud Monitoring.
exportIntervalMillis: 10_000,
exporter: new MetricExporter(),
})
);

// Create a meter
const meter = meterProvider.getMeter("metrics-sample");

// Create a counter instrument
const counter = meter.createCounter("metric_name");
// Record a measurement
counter.add(10, { key: "value" });

// Wait for the metric to be exported
new Promise((resolve) => {
setTimeout(resolve, 11_000);
});
```

## Viewing your metrics:
Expand Down
38 changes: 38 additions & 0 deletions samples/metrics/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Overview

This example shows how to use [@opentelemetry/sdk-metrics](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-metrics) to instrument a simple Node.js application and export metrics to [Google Cloud Monitoring](https://cloud.google.com/monitoring/).

## Installation

```sh
# from root of repo, build all packages
npm install
```

## Run the Application

```sh
# from this directory
npm start
```

## View metrics

https://console.cloud.google.com//monitoring/metrics-explorer?project=your-project-id

1. Select the Metric from the dropdown. You should see it under the resource "Generic Task":

<img width="1584" alt="choose metric type" src="images/choose-metric-type.png?raw=true"/>

2. View the timeseries:

<img width="1584" alt="view timeseries" src="images/metric-timeseries.png?raw=true"/>


## Useful links
- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>
- For more information on metrics, visit: <https://opentelemetry.io/docs/concepts/signals/metrics/>

## LICENSE

Apache License 2.0
Binary file added samples/metrics/images/choose-metric-type.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added samples/metrics/images/metric-timeseries.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 41 additions & 0 deletions samples/metrics/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const {
MeterProvider,
PeriodicExportingMetricReader,
} = require("@opentelemetry/sdk-metrics");
const { Resource } = require("@opentelemetry/resources");
const {
MetricExporter,
} = require("@google-cloud/opentelemetry-cloud-monitoring-exporter");

// Create MeterProvider
const meterProvider = new MeterProvider({
// Create a resource. These resources attributes will be translated to generic_task
// monitoring resource labels in Cloud Monitoring
resource: new Resource({
"service.name": "example-metric-service",
"service.namespace": "samples",
"service.instance.id": "12345",
}),
});
// Register the exporter
meterProvider.addMetricReader(
new PeriodicExportingMetricReader({
// Export metrics every 10 seconds. 5 seconds is the smallest sample period allowed by
// Cloud Monitoring.
exportIntervalMillis: 10_000,
exporter: new MetricExporter(),
})
);

// Create a meter
const meter = meterProvider.getMeter("metrics-sample");

// Create a counter instrument
const counter = meter.createCounter("metric_name");
// Record a measurement
counter.add(10, { key: "value" });

// Wait for the metric to be exported
new Promise((resolve) => {
setTimeout(resolve, 11_000);
});
131 changes: 131 additions & 0 deletions samples/metrics/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions samples/metrics/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "nodejs-example-google-cloud-monitoring",
"version": "0.15.0",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"scripts": {
"start": "node ./index.js"
},
"engines": {
"node": ">=10"
},
"repository": "GoogleCloudPlatform/opentelemetry-operations-js",
"dependencies": {
"@google-cloud/opentelemetry-cloud-monitoring-exporter": "0.15.0",
"@opentelemetry/api": "1.3.0",
"@opentelemetry/resources": "1.8.0",
"@opentelemetry/sdk-metrics": "1.8.0"
}
}
12 changes: 5 additions & 7 deletions samples/trace/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,15 @@ This example shows how to use [@opentelemetry/sdk-trace-node](https://github.com
## Installation

```sh
$ # from root of repo, build all packages
$ npm install
$ # from this directory
$ npm install
# from root of repo, build all packages
npm install
```

## Run the Application

```sh
$ # from this directory
$ npm start
# from this directory
npm start
```

## View traces
Expand All @@ -27,7 +25,7 @@ https://console.cloud.google.com/traces/list?project=your-project-id

## Useful links
- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>
- For more information on tracing, visit: <https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-tracing>
- For more information on tracing, visit: <https://opentelemetry.io/docs/concepts/signals/traces/>

## LICENSE

Expand Down
6 changes: 3 additions & 3 deletions samples/trace/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions samples/trace/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
},
"repository": "GoogleCloudPlatform/opentelemetry-operations-js",
"dependencies": {
"@google-cloud/opentelemetry-cloud-trace-exporter": "^1.2.0",
"@opentelemetry/api": "^1.0.0",
"@opentelemetry/sdk-trace-base": "^1.0.0",
"@opentelemetry/sdk-trace-node": "^1.0.0"
"@google-cloud/opentelemetry-cloud-trace-exporter": "1.2.0",
"@opentelemetry/api": "1.3.0",
"@opentelemetry/sdk-trace-base": "1.8.0",
"@opentelemetry/sdk-trace-node": "1.8.0"
}
}

0 comments on commit c9f6f06

Please sign in to comment.