From 28dbb0cd14835b3ad28fddc10b03e26afc14be93 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 15 Dec 2015 09:44:11 +0000 Subject: [PATCH] Refactor docker compose so default launches everything --- pom.xml | 14 ++- spring-cloud-sleuth-samples/pom.xml | 1 + .../Dockerfile | 12 +++ .../README.md | 39 ++++++++ .../docker-compose.yml | 19 +++- .../pom.xml | 89 +++++++++++++++++++ .../ZipkinStreamServerApplication.java | 15 ++++ .../src/main/resources/application.yml | 0 .../example/ZipkinServerApplicationTests.java | 31 +++++++ .../src/test/resources/drop.sql | 5 ++ spring-cloud-sleuth-zipkin-stream/README.md | 22 +++-- .../docker-compose.yml | 14 --- spring-cloud-sleuth-zipkin-stream/pom.xml | 15 ---- .../src/main/docker/Dockerfile | 6 -- .../stream/ZipkinStreamServerApplication.java | 15 ---- .../stream/ZipkinServerApplicationTests.java | 14 +++ 16 files changed, 250 insertions(+), 61 deletions(-) create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md rename spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml => spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml (53%) create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java rename spring-cloud-sleuth-zipkin-stream/src/main/resources/zipkin-server.yml => spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/resources/application.yml (100%) create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java create mode 100644 spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql delete mode 100644 spring-cloud-sleuth-zipkin-stream/docker-compose.yml delete mode 100644 spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile delete mode 100644 spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java diff --git a/pom.xml b/pom.xml index 8dbaf7069..b28d7bb4c 100644 --- a/pom.xml +++ b/pom.xml @@ -169,6 +169,16 @@ aspectjweaver ${aspectj.version} + + io.zipkin + zipkin-java-server + ${zipkin-java.version} + + + io.zipkin + zipkin-java-jdbc + ${zipkin-java.version} + org.spockframework @@ -186,13 +196,12 @@ cglib cglib-nodep 3.1 - test org.objenesis objenesis 2.1 - test + org.hamcrest @@ -230,6 +239,7 @@ 1.1.0.BUILD-SNAPSHOT 1.8.4 1.0-groovy-2.4 + 0.1.1 diff --git a/spring-cloud-sleuth-samples/pom.xml b/spring-cloud-sleuth-samples/pom.xml index 3e5520cbb..a0cdb690f 100644 --- a/spring-cloud-sleuth-samples/pom.xml +++ b/spring-cloud-sleuth-samples/pom.xml @@ -21,6 +21,7 @@ spring-cloud-sleuth-sample-messaging spring-cloud-sleuth-sample-ribbon spring-cloud-sleuth-sample-zipkin + spring-cloud-sleuth-sample-zipkin-stream diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile new file mode 100644 index 000000000..840422f69 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile @@ -0,0 +1,12 @@ +FROM springio/java8 +RUN chmod 777 -R /tmp +VOLUME /tmp +VOLUME /app +EXPOSE 9411 8000 +RUN groupadd -g 1000 spring +RUN useradd -u 1000 -g 1000 -ms /bin/bash spring +VOLUME /home/spring +ENV HOME /home/spring +USER spring +WORKDIR /app/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream +CMD ["../../mvnw", "spring-boot:run"] diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md new file mode 100644 index 000000000..d6cbc8074 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md @@ -0,0 +1,39 @@ +# Running a Zipkin Query Server + +There are 4 parts to Zipkin: the instrumented client apps, the web UI, the backend database and the query server. The database for this implementation is MySQL. + +## Zipkin Services + +Run this app using the docker-compose provided. + +``` +$ docker-compose build zipkin +$ docker-compose up +... +``` + +and test it + +``` +$ curl localhost:9411/api/v1/services +["zipkin-query"] +``` + +The app might fail to start if mysql is not available when it needs it. If that happens you can just start it separately: just keep running `docker-compose up` until it works. + + +## Instrumenting Apps + +Depend on [Spring Cloud Sleuth Stream](https://github.com/spring-cloud-spring-cloud-sleuth) and the rabbit binder (`spring-cloud-starter-stream-rabbit`). + +Once the apps start publishing spans they will appear in the span store as well. + +## Running in an IDE + +You can run this app in an IDE and still use docker-compose to create the middleware: + +``` +$ docker-compose up rabbitmq mysql +``` + +The web UI cannot access the docker host though, so you have to run that separately, or just test against the query server directly on port 9411. diff --git a/spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml similarity index 53% rename from spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml rename to spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml index b3ae76a1b..a85bc67f5 100644 --- a/spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml @@ -1,5 +1,22 @@ +mysql: + image: mysql + ports: + - 3306:3306 + environment: + - MYSQL_ROOT_PASSWORD=root + - MYSQL_DATABASE=test +rabbitmq: + image: rabbitmq:management + expose: + - 5672 + ports: + - 5672:5672 + - 15672:15672 zipkin: - image: springio/spring-cloud-sleuth-zipkin-stream + build: . + volumes: + - ../..:/app + - ~:/home/spring environment: - MYSQL_HOST=mysql - RABBIT_HOST=rabbitmq diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml new file mode 100644 index 000000000..0497b82bd --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + spring-cloud-sleuth-sample-zipkin-stream + jar + + spring-cloud-sleuth-sample-zipkin-stream + Spring Boot Zipkin Server + + + org.springframework.cloud + spring-cloud-sleuth-samples + 1.0.0.BUILD-SNAPSHOT + .. + + + + springio + UTF-8 + 1.8 + 0.1.0 + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework.cloud + spring-cloud-sleuth-zipkin-stream + + + org.springframework.integration + spring-integration-jmx + + + org.springframework.cloud + spring-cloud-stream-binder-rabbit + + + com.h2database + h2 + true + + + mysql + mysql-connector-java + true + + + org.projectlombok + lombok + true + + + + org.springframework.cloud + spring-cloud-stream-binder-local + test + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + exec + + + + + + diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java new file mode 100644 index 000000000..0cbf30128 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java @@ -0,0 +1,15 @@ +package example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer; + +@SpringBootApplication +@EnableZipkinStreamServer +public class ZipkinStreamServerApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(ZipkinStreamServerApplication.class, args); + } + +} diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/resources/zipkin-server.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/resources/application.yml similarity index 100% rename from spring-cloud-sleuth-zipkin-stream/src/main/resources/zipkin-server.yml rename to spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/resources/application.yml diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java new file mode 100644 index 000000000..9af6cd43e --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java @@ -0,0 +1,31 @@ +package example; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import example.ZipkinStreamServerApplication; +import io.zipkin.SpanStore; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = ZipkinStreamServerApplication.class) +@IntegrationTest({ "server.port=0", "spring.datasource.initialize=true" }) +@ActiveProfiles("test") +public class ZipkinServerApplicationTests { + + @Autowired + private SpanStore store; + + @Test + public void contextLoads() { + int count = this.store.getServiceNames().size(); + assertEquals(0, count); + } + +} diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql new file mode 100644 index 000000000..507f4f27f --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql @@ -0,0 +1,5 @@ +drop table zipkin_spans; +drop table zipkin_annotations; +drop table zipkin_binary_annotations; +drop table zipkin_dependencies; +drop table zipkin_dependency_links; \ No newline at end of file diff --git a/spring-cloud-sleuth-zipkin-stream/README.md b/spring-cloud-sleuth-zipkin-stream/README.md index f7cb1929d..3f03dab06 100644 --- a/spring-cloud-sleuth-zipkin-stream/README.md +++ b/spring-cloud-sleuth-zipkin-stream/README.md @@ -10,21 +10,27 @@ Depend on [Spring Cloud Sleuth Stream](https://github.com/spring-cloud-spring-cl ## Query Server -Code is [here](https://github.com/spring-cloud-spring-cloud-sleuth/spring-cloud-sleuth-zipkin-stream). +Depend on `spring-cloud-sleuth-zipkin-stream` and enable the server: -Bind to MySQL and the same Stream service that you did in the apps (rabbit, redis, kafka). Set `spring.datasource.initialize=true` the first time you start to initialize the database. Alternatively, curl it: +```java +@SpringBootApplication +@EnableZipkinStreamServer +public class ZipkinStreamServerApplication { -``` -$ curl zipkin-server.cfapps.io/env -d endpoints.restart.enabled=true -$ curl zipkin-server.cfapps.io/env -d spring.datasource.initialize=true -$ curl zipkin-server.cfapps.io/restart -d {} + public static void main(String[] args) throws Exception { + SpringApplication.run(ZipkinStreamServerApplication.class, args); + } + +} ``` -Uses the `zipkin-server` jar from the [OSS](https://github.com/openzipkin/zipkin-java) as well as `spring-cloud-sleuth-stream`. +Bind to MySQL and the same Stream service that you did in the apps (rabbit, redis, kafka). Set `spring.datasource.initialize=true` the first time you start to initialize the database. + +Uses the `zipkin-server` library from the [OSS](https://github.com/openzipkin/zipkin-java) as well as `spring-cloud-sleuth-stream`. > NOTE: running in the "test" profile you don't need MySQL (the span store is in memory). You could even run in PWS without MySQL. -## Web UI +## Web UI in Cloud Foundry Get the jar from the [OSS](https://github.com/openzipkin/zipkin) and push it: diff --git a/spring-cloud-sleuth-zipkin-stream/docker-compose.yml b/spring-cloud-sleuth-zipkin-stream/docker-compose.yml deleted file mode 100644 index 08fe0f294..000000000 --- a/spring-cloud-sleuth-zipkin-stream/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -mysql: - image: mysql - ports: - - "3306:3306" - environment: - - MYSQL_ROOT_PASSWORD=root - - MYSQL_DATABASE=test - volumes: - - "./conf.d:/etc/mysql/conf.d:ro" -rabbitmq: - image: rabbitmq:management - ports: - - 5672:5672 - - 15672:15672 diff --git a/spring-cloud-sleuth-zipkin-stream/pom.xml b/spring-cloud-sleuth-zipkin-stream/pom.xml index 4a5671e59..434a9d87b 100644 --- a/spring-cloud-sleuth-zipkin-stream/pom.xml +++ b/spring-cloud-sleuth-zipkin-stream/pom.xml @@ -19,7 +19,6 @@ springio UTF-8 1.8 - 0.1.0 @@ -28,11 +27,6 @@ spring-boot-configuration-processor true - - objenesis - org.objenesis - compile - org.springframework.boot spring-boot-starter-web @@ -66,12 +60,10 @@ io.zipkin zipkin-java-server - ${zipkin-java.version} io.zipkin zipkin-java-jdbc - ${zipkin-java.version} com.h2database @@ -117,13 +109,6 @@ - - org.springframework.boot - spring-boot-maven-plugin - - exec - - maven-resources-plugin diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile b/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile deleted file mode 100644 index 76917389e..000000000 --- a/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM frolvlad/alpine-oraclejdk8 -VOLUME /tmp -ADD @project.artifactId@-@project.version@-exec.jar app.jar -RUN sh -c 'touch /app.jar' -EXPOSE 9411 -CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java b/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java deleted file mode 100644 index ad7a4dc80..000000000 --- a/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.springframework.cloud.sleuth.zipkin.stream; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; - -@SpringBootApplication -@EnableZipkinStreamServer -public class ZipkinStreamServerApplication { - - public static void main(String[] args) throws Exception { - new SpringApplicationBuilder(ZipkinStreamServerApplication.class) - .properties("spring.config.name=zipkin-server").run(args); - } - -} diff --git a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java index ff200099d..6c2bb3845 100644 --- a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java +++ b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java @@ -5,8 +5,11 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.cloud.sleuth.zipkin.stream.ZipkinServerApplicationTests.ZipkinStreamServerApplication; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -27,4 +30,15 @@ public class ZipkinServerApplicationTests { assertEquals(0, count); } + @SpringBootApplication + @EnableZipkinStreamServer + public static class ZipkinStreamServerApplication { + + public static void main(String[] args) throws Exception { + new SpringApplicationBuilder(ZipkinStreamServerApplication.class) + .profiles("test").properties("spring.datasource.initialize=true") + .run(args); + } + + } }