Skip to content

Instantly share code, notes, and snippets.

@DazWilkin
Created October 10, 2017 20:59
Show Gist options
  • Save DazWilkin/05b1a2ed702e78019e20e862df274129 to your computer and use it in GitHub Desktop.
Save DazWilkin/05b1a2ed702e78019e20e862df274129 to your computer and use it in GitHub Desktop.
App Engine Standard J8 --> Stackdriver Monitoring Custom Metrics
<project>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<groupId>com.test</groupId>
<artifactId>root</artifactId>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-monitoring</artifactId>
<version>0.25.0-alpha</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-appengine</artifactId>
<version>0.8.0</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.57</version>
</dependency>
</dependencies>
<build>
<outputDirectory>target/${project.artifactId}-${project.version}/WEB-INF/classes
</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-io</artifactId>
<version>2.0.5</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.test;
import com.google.appengine.api.appidentity.AppIdentityService;
import com.google.appengine.api.appidentity.AppIdentityServiceFactory;
import com.google.auth.appengine.AppEngineCredentials;
import com.google.api.gax.core.CredentialsProvider;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.api.Metric;
import com.google.api.MonitoredResource;
import com.google.api.MetricDescriptor;
import com.google.cloud.monitoring.v3.MetricServiceClient;
import com.google.cloud.monitoring.v3.MetricServiceSettings;
import com.google.monitoring.v3.CreateTimeSeriesRequest;
import com.google.monitoring.v3.MetricDescriptorName;
import com.google.monitoring.v3.Point;
import com.google.monitoring.v3.ProjectName;
import com.google.monitoring.v3.TimeInterval;
import com.google.monitoring.v3.TimeSeries;
import com.google.monitoring.v3.TypedValue;
import com.google.protobuf.util.Timestamps;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.logging.Logger;
import java.util.Map;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet {
private String projectId = "[[YOUR-PROJECT-ID]]";
private static final Logger log = Logger.getLogger(TestServlet.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, Henry!\n");
AppIdentityService appIdentityService = AppIdentityServiceFactory.getAppIdentityService();
List<String> scopes = Arrays.asList("https://www.googleapis.com/auth/monitoring");
appIdentityService
.getAccessToken(scopes)
.getAccessToken();
AppEngineCredentials credentials = AppEngineCredentials
.newBuilder()
.setAppIdentityService(appIdentityService)
.setScopes(scopes)
.build();
CredentialsProvider credentialsProvider = FixedCredentialsProvider
.create(credentials);
MetricServiceSettings metricServiceSettings =
MetricServiceSettings.newBuilder()
.setCredentialsProvider(credentialsProvider)
.build();
MetricServiceClient metricServiceClient = MetricServiceClient
.create(metricServiceSettings);
Runtime rt = Runtime.getRuntime();
long free = rt.freeMemory();
resp.getWriter().println("Free: " + NumberFormat.getNumberInstance(Locale.US).format(free));
placeHolder2(metricServiceClient, resp, free);
TimeInterval interval = TimeInterval.newBuilder()
.setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))
.build();
TypedValue value = TypedValue.newBuilder()
.setInt64Value(metricPoint)
.build();
Point point = Point.newBuilder()
.setInterval(interval)
.setValue(value)
.build();
List<Point> pointList = new ArrayList<>();
pointList.add(point);
ProjectName name = ProjectName.create(projectId);
HashMap<String,String> metricLabels = new HashMap<String,String>();
metricLabels.put("memory", "free");
metricLabels.put("test", "salcode");
Metric metric = Metric.newBuilder()
.setType("custom.googleapis.com/instance/memory")
.putAllLabels(metricLabels)
.build();
Map<String, String> resourceLabels = new HashMap<String, String>();
resourceLabels.put("project_id", projectId);
MonitoredResource resource = MonitoredResource.newBuilder()
.setType("global")
.putAllLabels(resourceLabels)
.build();
TimeSeries timeSeries = TimeSeries.newBuilder()
.setMetric(metric)
.setResource(resource)
.addAllPoints(pointList)
.build();
List<TimeSeries> timeSeriesList = new ArrayList<>();
timeSeriesList.add(timeSeries);
CreateTimeSeriesRequest request = CreateTimeSeriesRequest.newBuilder()
.setNameWithProjectName(name)
.addAllTimeSeries(timeSeriesList)
.build();
metricServiceClient.createTimeSeries(request);
metricServiceClient.close();
} catch (Exception ex) {
resp.getWriter().println("Exception " + ex);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment