Skip to content

Commit 1047864

Browse files
committed
Java Prometheus
1 parent 340993a commit 1047864

File tree

8 files changed

+210
-0
lines changed

8 files changed

+210
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea
2+
target
3+
*.iml
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
FROM maven:3.5-jdk-8
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
version: '3'
2+
services:
3+
grafana:
4+
image: grafana/grafana:5.4.2
5+
ports:
6+
- "3000:3000"
7+
depends_on:
8+
- prom
9+
10+
prom:
11+
image: prom/prometheus:v2.6.0
12+
volumes:
13+
- ./prometheus.yml:/etc/prometheus/prometheus.yml
14+
command: "--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus"
15+
ports:
16+
- 9090:9090
17+
depends_on:
18+
- app
19+
20+
app:
21+
build: .
22+
volumes:
23+
- .:/app
24+
- ~/.m2:/root/.m2
25+
working_dir: /app
26+
command: bash -c "mvn clean package && java -jar target/healthcheck-prometheus-1.0-SNAPSHOT-jar-with-dependencies.jar"
27+
ports:
28+
- "8080:8080"
29+
depends_on:
30+
- db
31+
32+
db:
33+
container_name: some-mysql
34+
image: mysql/mysql-server:5.7
35+
environment:
36+
MYSQL_DATABASE: test
37+
MYSQL_ROOT_PASSWORD: hellokoding
38+
MYSQL_ROOT_HOST: '%'
39+
ports:
40+
- "3306:3306"
41+
restart: always
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.hellokoding.monitoring</groupId>
8+
<artifactId>healthcheck-prometheus</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
11+
<properties>
12+
<maven.compiler.source>1.8</maven.compiler.source>
13+
<maven.compiler.target>1.8</maven.compiler.target>
14+
<io.prometheus.simpleclient.version>0.6.0</io.prometheus.simpleclient.version>
15+
<com.github.strengthened.version>1.0.0</com.github.strengthened.version>
16+
<org.eclipse.jetty.version>8.1.7.v20120910</org.eclipse.jetty.version>
17+
<mysql.version>5.1.47</mysql.version>
18+
<maven.complier.version>3.1</maven.complier.version>
19+
</properties>
20+
21+
<dependencies>
22+
<dependency>
23+
<groupId>com.github.strengthened</groupId>
24+
<artifactId>prometheus-healthchecks</artifactId>
25+
<version>${com.github.strengthened.version}</version>
26+
</dependency>
27+
<dependency>
28+
<groupId>io.prometheus</groupId>
29+
<artifactId>simpleclient</artifactId>
30+
<version>${io.prometheus.simpleclient.version}</version>
31+
</dependency>
32+
<dependency>
33+
<groupId>io.prometheus</groupId>
34+
<artifactId>simpleclient_hotspot</artifactId>
35+
<version>${io.prometheus.simpleclient.version}</version>
36+
</dependency>
37+
<dependency>
38+
<groupId>io.prometheus</groupId>
39+
<artifactId>simpleclient_servlet</artifactId>
40+
<version>${io.prometheus.simpleclient.version}</version>
41+
</dependency>
42+
<dependency>
43+
<groupId>org.eclipse.jetty</groupId>
44+
<artifactId>jetty-servlet</artifactId>
45+
<version>${org.eclipse.jetty.version}</version>
46+
</dependency>
47+
<dependency>
48+
<groupId>mysql</groupId>
49+
<artifactId>mysql-connector-java</artifactId>
50+
<version>${mysql.version}</version>
51+
</dependency>
52+
</dependencies>
53+
54+
<build>
55+
<plugins>
56+
<plugin>
57+
<artifactId>maven-assembly-plugin</artifactId>
58+
<configuration>
59+
<archive>
60+
<manifest>
61+
<mainClass>com.hellokoding.monitoring.Application</mainClass>
62+
</manifest>
63+
</archive>
64+
<descriptorRefs>
65+
<descriptorRef>jar-with-dependencies</descriptorRef>
66+
</descriptorRefs>
67+
</configuration>
68+
<executions>
69+
<execution>
70+
<id>make-assembly</id>
71+
<phase>package</phase>
72+
<goals>
73+
<goal>single</goal>
74+
</goals>
75+
</execution>
76+
</executions>
77+
</plugin>
78+
</plugins>
79+
</build>
80+
</project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
global:
2+
scrape_interval: 15s
3+
evaluation_interval: 15s
4+
5+
scrape_configs:
6+
- job_name: prometheus
7+
static_configs:
8+
- targets: ['localhost:9090']
9+
10+
- job_name: app
11+
static_configs:
12+
- targets: ['app:8080']
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.hellokoding.monitoring;
2+
3+
import com.github.strengthened.prometheus.healthchecks.HealthChecksCollector;
4+
5+
public class Application {
6+
public static void main(String[] args) throws Exception {
7+
HealthChecksCollector healthchecksMetrics = HealthChecksCollector.Builder.of().setGaugeMetricName("hello_koding_health_check").build();
8+
healthchecksMetrics.addHealthCheck("database", new DbHealthCheck());
9+
10+
new HealthCheckExporter(healthchecksMetrics).export();
11+
}
12+
}
13+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.hellokoding.monitoring;
2+
3+
import com.github.strengthened.prometheus.healthchecks.HealthCheck;
4+
import com.github.strengthened.prometheus.healthchecks.HealthStatus;
5+
6+
import java.sql.Connection;
7+
import java.sql.DriverManager;
8+
import java.sql.SQLException;
9+
import java.util.logging.Logger;
10+
11+
class DbHealthCheck extends HealthCheck {
12+
private final Logger logger = Logger.getLogger(this.getClass().getName());
13+
14+
@Override
15+
public HealthStatus check() {
16+
return checkDbConnection() ? HealthStatus.HEALTHY : HealthStatus.UNHEALTHY;
17+
}
18+
19+
private boolean checkDbConnection() {
20+
try (Connection connection = DriverManager.getConnection("jdbc:mysql://db:3306/test?useSSL=false", "root", "hellokoding")) {
21+
logger.info("Database connected!");
22+
return true;
23+
} catch (SQLException e) {
24+
logger.info("Can not connect the database!");
25+
return false;
26+
}
27+
}
28+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.hellokoding.monitoring;
2+
3+
import com.github.strengthened.prometheus.healthchecks.HealthChecksCollector;
4+
import io.prometheus.client.CollectorRegistry;
5+
import io.prometheus.client.exporter.MetricsServlet;
6+
import io.prometheus.client.hotspot.DefaultExports;
7+
import org.eclipse.jetty.server.Server;
8+
import org.eclipse.jetty.servlet.ServletContextHandler;
9+
import org.eclipse.jetty.servlet.ServletHolder;
10+
11+
public class HealthCheckExporter {
12+
private final HealthChecksCollector healthChecksCollector;
13+
14+
public HealthCheckExporter(HealthChecksCollector healthChecksCollector) {
15+
this.healthChecksCollector = healthChecksCollector;
16+
}
17+
18+
public void export() throws Exception {
19+
CollectorRegistry.defaultRegistry.register(this.healthChecksCollector);
20+
21+
Server server = new Server(8080);
22+
ServletContextHandler context = new ServletContextHandler();
23+
context.setContextPath("/");
24+
server.setHandler(context);
25+
26+
context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");
27+
DefaultExports.initialize();
28+
29+
server.start();
30+
server.join();
31+
}
32+
}

0 commit comments

Comments
 (0)