├── .gitignore ├── LICENSE ├── README.md ├── activemq-artemis └── compose.yml ├── activemq └── compose.yml ├── apicurio-registry ├── compose-oidc.yml ├── compose.yml └── initializer.yml ├── compose.yml ├── demo-apps ├── .gitignore ├── compose-otel.yml └── compose.yml ├── elasticsearch ├── compose-opendistro.yml └── compose.yml ├── filebeat ├── compose.yml └── filebeat.yml ├── grafana ├── compose.yml └── provisioning │ ├── dashboards │ ├── CamelAndSpringBoot.json │ ├── Logs.json │ ├── all.yml │ └── jaeger.json │ └── datasources │ └── datasource.yml ├── gravitee └── compose.yml ├── jaeger ├── README.md ├── compose.yml └── streaming.yml ├── kafka-rest-proxy └── compose-cp.yml ├── kafka ├── compose-bitnami.yml ├── compose-cp.yml ├── compose-landoop.yml └── compose.yml ├── keycloak ├── compose-cluster.yml ├── compose-metrics.yml ├── compose.yml ├── initializer.yml └── providers │ └── keycloak-metrics-spi-2.4.0.jar ├── kibana ├── compose-opendistro.yml ├── compose.yml └── opendistro │ ├── Dockerfile │ └── kibana.yml ├── kong ├── compose-free-mode.yml └── compose.yml ├── microcks ├── compose-async-addon.yml ├── compose-devmode.yml ├── compose.yml ├── config │ ├── application.properties │ └── features.properties └── keycloak-realm │ └── microcks-realm-sample.json ├── mongo └── compose.yml ├── openldap └── compose.yml ├── oracle-xe └── compose.yml ├── otel-collector ├── compose.yml └── otel-collector-config.yaml ├── postgresql ├── README.md └── compose.yml ├── prometheus ├── compose.yml └── prometheusConfig.yml ├── rabbitmq ├── README.md └── compose.yml ├── redis └── compose.yml ├── schema-registry ├── compose-cluster.yml └── compose.yml ├── sftp-server ├── .gitignore └── compose.yml ├── swagger-ui └── compose.yml ├── traefik ├── README.md └── docker-demo.yml ├── weaviate └── compose.yml ├── wso2am ├── README.md └── compose.yml └── zipkin ├── compose-es.yml └── compose.yml /.gitignore: -------------------------------------------------------------------------------- 1 | /influxdb/chronograf/* 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 stn1slv 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker environments 2 | 3 | This repo contains popular OpenSource infrastructure components: 4 | 5 | Component | Compose file | Comments 6 | -------------- | ------------------------------------ | ---------------------------- 7 | elasticsearch | elasticsearch/compose.yml | ElasticSearch 8 | elasticsearch | elasticsearch/compose-opendistro.yml | OpenDistro for ElasticSearch 9 | kibana | kibana/compose.yml | Kibana 10 | kibana | kibana/compose-opendistro.yml | OpenDistro for ElasticSearch (Kibana) 11 | prometheus | prometheus/compose.yml | Prometheus 12 | grafana | grafana/compose.yml | Grafana 13 | zipkin | zipkin/compose.yml | Zipkin 14 | jaeger | jaeger/compose.yml | Jaeger 15 | keycloak | keycloak/compose.yml | KeyCloak (single instance) 16 | keycloak | keycloak/compose-cluster.yml | KeyCloak (standalone cluster) 17 | postgresql | postgresql/compose.yml | PostgreSQL 18 | oracle-xe | oracle-xe/compose.yml | Oracle Database XE 19 | redis | redis/compose.yml | Redis 20 | mongo | mongo/compose.yml | MongoDB 21 | openldap | openldap/compose.yml | OpenLDAP 22 | sftp-server | sftp-server/compose.yml | sFTP server 23 | kafka | kafka/compose.yml | Kafka distribution with Kafka Connect UI, Kafka Topics UI, Confluent Schema Registry and REST Proxy 24 | kafka | kafka/compose-cp.yml | Confluent Platform OSS distribution (Kafka & Zookeeper) 25 | schema-registry | schema-registry/compose.yml | Confluent Schema Registry 26 | kafka-rest-proxy | kafka-rest-proxy/compose-cp.yml | Confluent REST proxy 27 | rabbitmq | rabbitmq/compose.yml | RabbitMQ 28 | wso2am | wso2am/compose.yml | WSO2 API Manager 29 | activemq | activemq/compose.yml | Apache ActiveMQ Classic 30 | activemq-artemis | activemq-artemis/compose.yml | Apache ActiveMQ Artemis 31 | swagger-ui | swagger-ui/compose.yml | Swagger UI 32 | apicurio-registry | apicurio-registry/compose.yml | Apicurio Registry 33 | otel-collector | otel-collector/compose.yml | OpenTelemetry Collector 34 | kong | kong/compose.yml | Kong Gateway OSS 35 | kong | kong/compose-free-mode.yml | Kong Gateway Free mode 36 | ## Running 37 | 38 | All the following docker-compose commands should be run from this directory. 39 | 40 | You may want to remove any old containers to start clean: 41 | ``` 42 | docker rm kafka zookeeper keycloak prometheus grafana kibana elasticsearch jaeger postgresql 43 | ``` 44 | ### Popular bundles 45 | ##### ElasticSearch & Kibana 46 | You can startup all the containers at once: 47 | ``` 48 | docker-compose -f compose.yml -f elasticsearch/compose.yml -f kibana/compose.yml up --remove-orphans 49 | ``` 50 | Or, you can have multiple terminal windows and start individual component in each: 51 | ``` 52 | docker-compose -f compose.yml -f elasticsearch/compose.yml up 53 | 54 | docker-compose -f compose.yml -f kibana/compose.yml up 55 | ``` 56 | ##### Prometheus & Grafana 57 | You can startup all the containers at once: 58 | ``` 59 | docker-compose -f compose.yml -f prometheus/compose.yml -f grafana/compose.yml up --remove-orphans 60 | ``` 61 | Or, you can have multiple terminal windows and start individual component in each: 62 | ``` 63 | docker-compose -f compose.yml -f prometheus/compose.yml up 64 | 65 | docker-compose -f compose.yml -f grafana/compose.yml up 66 | ``` 67 | -------------------------------------------------------------------------------- /activemq-artemis/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | artemis: 6 | image: apache/activemq-artemis:2.37.0 7 | container_name: artemis 8 | environment: 9 | - ARTEMIS_USER=admin 10 | - ARTEMIS_PASSWORD=admin 11 | ports: 12 | - 8161:8161 13 | - 61616:61616 -------------------------------------------------------------------------------- /activemq/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | activemq: 6 | image: apache/activemq-classic:6.1.2 7 | container_name: activemq 8 | environment: 9 | - ACTIVEMQ_CONNECTION_USER=admin 10 | - ACTIVEMQ_CONNECTION_PASSWORD=admin 11 | - ACTIVEMQ_WEB_USER=admin 12 | - ACTIVEMQ_WEB_PASSWORD=admin 13 | ports: 14 | - 61616:61616 15 | - 8161:8161 -------------------------------------------------------------------------------- /apicurio-registry/compose-oidc.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | schema-registry: 5 | image: apicurio/apicurio-registry-mem:2.6.2.Final 6 | container_name: schema-registry 7 | environment: 8 | ###--- COMMON CONFIG --- 9 | - AUTH_ENABLED=true 10 | - KEYCLOAK_URL=http://keycloak:8080/ 11 | # - KEYCLOAK_URL=http://keycloak:8080/auth #for old keycloak servers 12 | - KEYCLOAK_REALM=registry 13 | - KEYCLOAK_API_CLIENT_ID=registry-api 14 | - KEYCLOAK_UI_CLIENT_ID=apicurio-registry 15 | # - REGISTRY_LOG_LEVEL=INFO 16 | 17 | ###--- HTTP BASIC AUTH --- 18 | # - REGISTRY_AUTH_CLIENT_SECRET=registry-api-secret 19 | # - REGISTRY_AUTH_ANONYMOUS_READ_ACCESS_ENABLED=true 20 | # - ROLE_BASED_AUTHZ_ENABLED=true 21 | # # - ROLE_BASED_AUTHZ_SOURCE=token 22 | 23 | ###--- AOUTH2 AUTH --- 24 | - CLIENT_CREDENTIALS_BASIC_AUTH_ENABLED=false 25 | - REGISTRY_AUTH_ANONYMOUS_READ_ACCESS_ENABLED=true 26 | - ROLE_BASED_AUTHZ_ENABLED=true 27 | - ROLE_BASED_AUTHZ_SOURCE=token 28 | - OWNER_ONLY_AUTHZ_ENABLED=true 29 | - REGISTRY_UI_CONFIG_AUTH_TYPE=none 30 | # - REGISTRY_UI_FEATURES_READONLY=true 31 | # - QUARKUS_KEYCLOAK_POLICY_ENFORCER_ENABLE=true 32 | ### Configuration params: https://www.apicur.io/registry/docs/apicurio-registry/2.3.x/getting-started/assembly-configuring-the-registry.html#all-registry-configs_registry 33 | ports: 34 | - 8180:8080 35 | -------------------------------------------------------------------------------- /apicurio-registry/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | schema-registry: 5 | image: apicurio/apicurio-registry-mem:2.6.2.Final 6 | container_name: schema-registry 7 | ports: 8 | - 8180:8080 9 | -------------------------------------------------------------------------------- /apicurio-registry/initializer.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | sr-init: 5 | # Sources: https://github.com/stn1slv/apicurio-registry-initializer 6 | image: stn1slv/apicurio-registry-dev-data:1.0 7 | container_name: sr-init 8 | environment: 9 | KEYCLOAK_USER: jcooper 10 | KEYCLOAK_PASSWORD: jcooper 11 | KEYCLOAK_ENDPOINT: http://keycloak:8080/ 12 | KEYCLOAK_REALM: registry # realm name for creation users and clints 13 | KEYCLOAK_CLIENT_ID: registry-api 14 | KEYCLOAK_CLIENT_SECRET: registry-api-secret 15 | APICURIO_ENDPOINT: http://schema-registry:8080 #without last slash -------------------------------------------------------------------------------- /compose.yml: -------------------------------------------------------------------------------- 1 | ## version: '3.8' 2 | 3 | # This files serves as filesystem anchor 4 | # Including it as first .yml file makes all build paths relative to this directory ('docker') 5 | # 6 | # Examples: 7 | # 8 | # docker-compose -f compose.yml -f prometheus/compose.yml -f grafana/compose.yml up --remove-orphans 9 | # -------------------------------------------------------------------------------- /demo-apps/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/maven,intellij+all,intellij,java 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=maven,intellij+all,intellij,java 4 | 5 | ### Intellij ### 6 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 7 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 8 | 9 | # User-specific stuff 10 | .idea/**/workspace.xml 11 | .idea/**/tasks.xml 12 | .idea/**/usage.statistics.xml 13 | .idea/**/dictionaries 14 | .idea/**/shelf 15 | 16 | # Generated files 17 | .idea/**/contentModel.xml 18 | 19 | # Sensitive or high-churn files 20 | .idea/**/dataSources/ 21 | .idea/**/dataSources.ids 22 | .idea/**/dataSources.local.xml 23 | .idea/**/sqlDataSources.xml 24 | .idea/**/dynamic.xml 25 | .idea/**/uiDesigner.xml 26 | .idea/**/dbnavigator.xml 27 | 28 | # Gradle 29 | .idea/**/gradle.xml 30 | .idea/**/libraries 31 | 32 | # Gradle and Maven with auto-import 33 | # When using Gradle or Maven with auto-import, you should exclude module files, 34 | # since they will be recreated, and may cause churn. Uncomment if using 35 | # auto-import. 36 | # .idea/artifacts 37 | # .idea/compiler.xml 38 | # .idea/jarRepositories.xml 39 | # .idea/modules.xml 40 | # .idea/*.iml 41 | # .idea/modules 42 | # *.iml 43 | # *.ipr 44 | 45 | # CMake 46 | cmake-build-*/ 47 | 48 | # Mongo Explorer plugin 49 | .idea/**/mongoSettings.xml 50 | 51 | # File-based project format 52 | *.iws 53 | 54 | # IntelliJ 55 | out/ 56 | 57 | # mpeltonen/sbt-idea plugin 58 | .idea_modules/ 59 | 60 | # JIRA plugin 61 | atlassian-ide-plugin.xml 62 | 63 | # Cursive Clojure plugin 64 | .idea/replstate.xml 65 | 66 | # Crashlytics plugin (for Android Studio and IntelliJ) 67 | com_crashlytics_export_strings.xml 68 | crashlytics.properties 69 | crashlytics-build.properties 70 | fabric.properties 71 | 72 | # Editor-based Rest Client 73 | .idea/httpRequests 74 | 75 | # Android studio 3.1+ serialized cache file 76 | .idea/caches/build_file_checksums.ser 77 | 78 | ### Intellij Patch ### 79 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 80 | 81 | # *.iml 82 | # modules.xml 83 | # .idea/misc.xml 84 | # *.ipr 85 | 86 | # Sonarlint plugin 87 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 88 | .idea/**/sonarlint/ 89 | 90 | # SonarQube Plugin 91 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 92 | .idea/**/sonarIssues.xml 93 | 94 | # Markdown Navigator plugin 95 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 96 | .idea/**/markdown-navigator.xml 97 | .idea/**/markdown-navigator-enh.xml 98 | .idea/**/markdown-navigator/ 99 | 100 | # Cache file creation bug 101 | # See https://youtrack.jetbrains.com/issue/JBR-2257 102 | .idea/$CACHE_FILE$ 103 | 104 | # CodeStream plugin 105 | # https://plugins.jetbrains.com/plugin/12206-codestream 106 | .idea/codestream.xml 107 | 108 | ### Intellij+all ### 109 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 110 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 111 | 112 | # User-specific stuff 113 | 114 | # Generated files 115 | 116 | # Sensitive or high-churn files 117 | 118 | # Gradle 119 | 120 | # Gradle and Maven with auto-import 121 | # When using Gradle or Maven with auto-import, you should exclude module files, 122 | # since they will be recreated, and may cause churn. Uncomment if using 123 | # auto-import. 124 | # .idea/artifacts 125 | # .idea/compiler.xml 126 | # .idea/jarRepositories.xml 127 | # .idea/modules.xml 128 | # .idea/*.iml 129 | # .idea/modules 130 | # *.iml 131 | # *.ipr 132 | 133 | # CMake 134 | 135 | # Mongo Explorer plugin 136 | 137 | # File-based project format 138 | 139 | # IntelliJ 140 | 141 | # mpeltonen/sbt-idea plugin 142 | 143 | # JIRA plugin 144 | 145 | # Cursive Clojure plugin 146 | 147 | # Crashlytics plugin (for Android Studio and IntelliJ) 148 | 149 | # Editor-based Rest Client 150 | 151 | # Android studio 3.1+ serialized cache file 152 | 153 | ### Intellij+all Patch ### 154 | # Ignores the whole .idea folder and all .iml files 155 | # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 156 | 157 | .idea/ 158 | 159 | # Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 160 | 161 | *.iml 162 | modules.xml 163 | .idea/misc.xml 164 | *.ipr 165 | 166 | # Sonarlint plugin 167 | .idea/sonarlint 168 | 169 | ### Java ### 170 | # Compiled class file 171 | *.class 172 | 173 | # Log file 174 | *.log 175 | 176 | # BlueJ files 177 | *.ctxt 178 | 179 | # Mobile Tools for Java (J2ME) 180 | .mtj.tmp/ 181 | 182 | # Package Files # 183 | *.jar 184 | *.war 185 | *.nar 186 | *.ear 187 | *.zip 188 | *.tar.gz 189 | *.rar 190 | 191 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 192 | hs_err_pid* 193 | 194 | ### Maven ### 195 | target/ 196 | pom.xml.tag 197 | pom.xml.releaseBackup 198 | pom.xml.versionsBackup 199 | pom.xml.next 200 | release.properties 201 | dependency-reduced-pom.xml 202 | buildNumber.properties 203 | .mvn/timing.properties 204 | # https://github.com/takari/maven-wrapper#usage-without-binary-jar 205 | .mvn/wrapper/maven-wrapper.jar 206 | 207 | # End of https://www.toptal.com/developers/gitignore/api/maven,intellij+all,intellij,java 208 | .settings/ 209 | .classpath 210 | .project 211 | -------------------------------------------------------------------------------- /demo-apps/compose-otel.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | tripbooking: 5 | image: stn1slv/trip-booking-demo-app:otel 6 | container_name: trip-booking-app 7 | environment: 8 | - OTEL_SERVICE_NAME=trip-booking-app 9 | - OTEL_PROPAGATORS=b3multi 10 | # - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://otel-collector:4317 11 | # - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://otel-collector:4318/v1/metrics 12 | - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 13 | - OTEL_EXPORTER_OTLP_PROTOCOL=grpc 14 | - OTEL_TRACES_EXPORTER=otlp 15 | - OTEL_METRICS_EXPORTER=otlp 16 | - OTEL_LOGS_EXPORTER=none 17 | - MANAGEMENT_OTLP_METRICS_EXPORT_URL=http://otel-collector:4318/v1/metrics # Metrics Exporter URL 18 | - OTEL_RESOURCE_ATTRIBUTES=application=trip-booking-app 19 | # - OTEL_METRICS_EXPORTER=prometheus 20 | ports: 21 | - 8080:8080 22 | carbooking: 23 | image: stn1slv/car-booking-demo-app:otel 24 | container_name: car-booking-app 25 | environment: 26 | - OTEL_SERVICE_NAME=car-booking-app 27 | - OTEL_PROPAGATORS=b3multi 28 | # - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://otel-collector:4317 29 | # - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://otel-collector:4318/v1/metrics 30 | - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 31 | - OTEL_EXPORTER_OTLP_PROTOCOL=grpc 32 | - OTEL_TRACES_EXPORTER=otlp 33 | - OTEL_METRICS_EXPORTER=otlp 34 | - OTEL_LOGS_EXPORTER=none 35 | - MANAGEMENT_OTLP_METRICS_EXPORT_URL=http://otel-collector:4318/v1/metrics # Metrics Exporter URL 36 | - OTEL_RESOURCE_ATTRIBUTES=application=car-booking-app 37 | # - OTEL_METRICS_EXPORTER=prometheus 38 | ports: 39 | - 8081:8080 40 | flightbooking: 41 | image: stn1slv/flight-booking-demo-app:otel 42 | container_name: flight-booking-app 43 | environment: 44 | - OTEL_SERVICE_NAME=flight-booking-app 45 | - OTEL_PROPAGATORS=b3multi 46 | # - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://otel-collector:4317 47 | # - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://otel-collector:4318/v1/metrics 48 | - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 49 | - OTEL_EXPORTER_OTLP_PROTOCOL=grpc 50 | - OTEL_TRACES_EXPORTER=otlp 51 | - OTEL_METRICS_EXPORTER=otlp 52 | - OTEL_LOGS_EXPORTER=none 53 | - MANAGEMENT_OTLP_METRICS_EXPORT_URL=http://otel-collector:4318/v1/metrics # Metrics Exporter URL 54 | - OTEL_RESOURCE_ATTRIBUTES=application=flight-booking-app 55 | # - OTEL_METRICS_EXPORTER=prometheus 56 | ports: 57 | - 8082:8080 58 | hotelbooking: 59 | image: stn1slv/hotel-booking-demo-app:otel 60 | container_name: hotel-booking-app 61 | environment: 62 | - OTEL_SERVICE_NAME=hotel-booking-app 63 | - OTEL_PROPAGATORS=b3multi 64 | # - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://otel-collector:4317 65 | # - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://otel-collector:4318/v1/metrics 66 | - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 67 | - OTEL_EXPORTER_OTLP_PROTOCOL=grpc 68 | - OTEL_TRACES_EXPORTER=otlp 69 | - OTEL_METRICS_EXPORTER=otlp 70 | - OTEL_LOGS_EXPORTER=none 71 | - MANAGEMENT_OTLP_METRICS_EXPORT_URL=http://otel-collector:4318/v1/metrics # Metrics Exporter URL 72 | - OTEL_RESOURCE_ATTRIBUTES=application=hotel-booking-app 73 | # - OTEL_METRICS_EXPORTER=prometheus 74 | ports: 75 | - 8083:8080 -------------------------------------------------------------------------------- /demo-apps/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | tripbooking: 5 | image: stn1slv/trip-booking-demo-app 6 | container_name: trip-booking-app 7 | ports: 8 | - 8080:8080 9 | carbooking: 10 | image: stn1slv/car-booking-demo-app 11 | container_name: car-booking-app 12 | ports: 13 | - 8081:8080 14 | flightbooking: 15 | image: stn1slv/flight-booking-demo-app 16 | container_name: flight-booking-app 17 | ports: 18 | - 8082:8080 19 | hotelbooking: 20 | image: stn1slv/hotel-booking-demo-app 21 | container_name: hotel-booking-app 22 | ports: 23 | - 8083:8080 -------------------------------------------------------------------------------- /elasticsearch/compose-opendistro.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | elasticsearch: 6 | image: amazon/opendistro-for-elasticsearch:1.13.3 7 | container_name: elasticsearch 8 | environment: 9 | - node.name=es01 10 | - cluster.name=docker-cluster 11 | - discovery.type=single-node 12 | - bootstrap.memory_lock=true 13 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 14 | - opendistro_security.disabled=true #OpenDistro: disable security for PoC purposes 15 | - DISABLE_INSTALL_DEMO_CONFIG=true #OpenDistro: https://opendistro.github.io/for-elasticsearch-docs/docs/security/configuration 16 | ulimits: 17 | memlock: 18 | soft: -1 19 | hard: -1 20 | nofile: 21 | soft: 65536 # maximum number of open files for the Elasticsearch user, set to at least 65536 on modern systems 22 | hard: 65536 23 | ports: 24 | - 9200:9200 25 | - 9300:9300 26 | - 9600:9600 #OpenDistro: performance profiler port -------------------------------------------------------------------------------- /elasticsearch/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | elasticsearch: 6 | image: docker.elastic.co/elasticsearch/elasticsearch:8.17.2 7 | container_name: elasticsearch 8 | restart: always 9 | deploy: 10 | resources: 11 | limits: 12 | memory: 1GB 13 | environment: 14 | - node.name=es01 15 | # - cluster.name=docker-cluster 16 | - discovery.type=single-node 17 | # - bootstrap.memory_lock=true 18 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 19 | - xpack.security.enabled=false 20 | - ELASTIC_USERNAME=elastic 21 | - ELASTIC_PASSWORD=elastic 22 | - "cluster.routing.allocation.disk.threshold_enabled=false" 23 | - "node.roles=[data, master, ingest]" # Explicitly set node roles 24 | ulimits: 25 | memlock: 26 | soft: -1 27 | hard: -1 28 | nofile: 29 | soft: 65536 # maximum number of open files for the Elasticsearch user, set to at least 65536 on modern systems 30 | hard: 65536 31 | ports: 32 | - 9200:9200 33 | # - 9300:9300 -------------------------------------------------------------------------------- /filebeat/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | filebeat: 5 | image: docker.elastic.co/beats/filebeat:8.17.2 6 | container_name: filebeat 7 | user: root 8 | restart: always 9 | volumes: 10 | - /var/lib/docker:/var/lib/docker:ro 11 | - /var/run/docker.sock:/var/run/docker.sock 12 | - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml 13 | command: filebeat -e --strict.perms=false -E output.elasticsearch.hosts=["elasticsearch:9200"] -------------------------------------------------------------------------------- /filebeat/filebeat.yml: -------------------------------------------------------------------------------- 1 | setup.template.name: "filebeat" 2 | setup.template.pattern: "filebeat" 3 | setup.ilm.enabled: false 4 | 5 | filebeat.inputs: 6 | - type: container 7 | paths: 8 | - '/var/lib/docker/containers/*/*.log' 9 | 10 | multiline.type: pattern 11 | multiline.pattern: '^[[:space:]]' 12 | multiline.negate: false 13 | multiline.match: after 14 | 15 | logging.level: warning 16 | 17 | processors: 18 | - add_docker_metadata: 19 | host: "unix:///var/run/docker.sock" 20 | - dissect: 21 | tokenizer: "%{time} %{severity} [%{traceid},%{spanId}] %{class} - %{message}" 22 | field: "message" 23 | target_prefix: "msg" 24 | # - drop_event: 25 | # when: 26 | # not: 27 | # equals: 28 | # container.name: "trip-booking-app" 29 | 30 | #FOR DEBUG 31 | # output.console: 32 | # pretty: true 33 | 34 | output.elasticsearch: 35 | hosts: ["http://elasticsearch:9200"] 36 | username: "elastic" 37 | password: "elastic" 38 | # index: "filebeat-%{+yyyy.MM.dd}" 39 | index: "filebeat-%{+yyyy.MM.dd}" -------------------------------------------------------------------------------- /grafana/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | grafana: 6 | image: grafana/grafana:11.5.2 7 | container_name: grafana 8 | restart: unless-stopped 9 | environment: 10 | - GF_SECURITY_ADMIN_PASSWORD=admin 11 | 12 | # Install plugins 13 | #- GF_INSTALL_PLUGINS=vonage-status-panel,jdbranham-diagram-panel,agenty-flowcharting-panel,yesoreyeram-boomtable-panel 14 | 15 | # Log level 16 | #- GF_LOG_LEVEL=debug 17 | ports: 18 | - 3000:3000 19 | volumes: 20 | - ./grafana/provisioning/dashboards/:/etc/grafana/provisioning/dashboards/ 21 | - ./grafana/provisioning/datasources/:/etc/grafana/provisioning/datasources/ -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/Logs.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "type": "dashboard" 12 | } 13 | ] 14 | }, 15 | "editable": true, 16 | "gnetId": null, 17 | "graphTooltip": 0, 18 | "iteration": 1624882556730, 19 | "links": [], 20 | "panels": [ 21 | { 22 | "datasource": "Elasticsearch", 23 | "fieldConfig": { 24 | "defaults": { 25 | "color": { 26 | "mode": "thresholds" 27 | }, 28 | "custom": { 29 | "align": null, 30 | "filterable": false 31 | }, 32 | "mappings": [], 33 | "thresholds": { 34 | "mode": "absolute", 35 | "steps": [ 36 | { 37 | "color": "green", 38 | "value": null 39 | }, 40 | { 41 | "color": "red", 42 | "value": 80 43 | } 44 | ] 45 | } 46 | }, 47 | "overrides": [ 48 | { 49 | "matcher": { 50 | "id": "byName", 51 | "options": "Timestamp" 52 | }, 53 | "properties": [ 54 | { 55 | "id": "custom.width", 56 | "value": 147 57 | } 58 | ] 59 | }, 60 | { 61 | "matcher": { 62 | "id": "byName", 63 | "options": "Container" 64 | }, 65 | "properties": [ 66 | { 67 | "id": "custom.width", 68 | "value": 134 69 | } 70 | ] 71 | }, 72 | { 73 | "matcher": { 74 | "id": "byName", 75 | "options": "Message" 76 | }, 77 | "properties": [ 78 | { 79 | "id": "custom.width", 80 | "value": 910 81 | } 82 | ] 83 | }, 84 | { 85 | "matcher": { 86 | "id": "byName", 87 | "options": "Severity" 88 | }, 89 | "properties": [ 90 | { 91 | "id": "custom.width", 92 | "value": 72 93 | } 94 | ] 95 | }, 96 | { 97 | "matcher": { 98 | "id": "byName", 99 | "options": "Class" 100 | }, 101 | "properties": [ 102 | { 103 | "id": "custom.width", 104 | "value": 97 105 | } 106 | ] 107 | }, 108 | { 109 | "matcher": { 110 | "id": "byName", 111 | "options": "TraceId" 112 | }, 113 | "properties": [ 114 | { 115 | "id": "custom.width", 116 | "value": 144 117 | } 118 | ] 119 | } 120 | ] 121 | }, 122 | "gridPos": { 123 | "h": 17, 124 | "w": 24, 125 | "x": 0, 126 | "y": 0 127 | }, 128 | "id": 2, 129 | "options": { 130 | "showHeader": true, 131 | "sortBy": [ 132 | { 133 | "desc": false, 134 | "displayName": "TraceId" 135 | } 136 | ] 137 | }, 138 | "pluginVersion": "7.5.9", 139 | "targets": [ 140 | { 141 | "alias": "", 142 | "bucketAggs": [ 143 | { 144 | "field": "@timestamp", 145 | "id": "2", 146 | "settings": { 147 | "interval": "auto" 148 | }, 149 | "type": "date_histogram" 150 | } 151 | ], 152 | "metrics": [ 153 | { 154 | "id": "1", 155 | "type": "logs" 156 | } 157 | ], 158 | "query": "container.name:*-app msg.severity:* msg.traceId:*", 159 | "refId": "A", 160 | "timeField": "@timestamp" 161 | } 162 | ], 163 | "title": "Application logs", 164 | "transformations": [ 165 | { 166 | "id": "organize", 167 | "options": { 168 | "excludeByName": { 169 | "_id": true, 170 | "_index": true, 171 | "_source": true, 172 | "_type": true, 173 | "agent.ephemeral_id": true, 174 | "agent.hostname": true, 175 | "agent.id": true, 176 | "agent.name": true, 177 | "agent.type": true, 178 | "agent.version": true, 179 | "container.id": true, 180 | "container.image.name": true, 181 | "container.labels.com_docker_compose_config-hash": true, 182 | "container.labels.com_docker_compose_container-number": true, 183 | "container.labels.com_docker_compose_oneoff": true, 184 | "container.labels.com_docker_compose_project": true, 185 | "container.labels.com_docker_compose_project_config_files": true, 186 | "container.labels.com_docker_compose_project_working_dir": true, 187 | "container.labels.com_docker_compose_service": true, 188 | "container.labels.com_docker_compose_version": true, 189 | "container.labels.description": true, 190 | "container.labels.desktop_docker_io/binds/0/Source": true, 191 | "container.labels.desktop_docker_io/binds/0/SourceKind": true, 192 | "container.labels.desktop_docker_io/binds/0/Target": true, 193 | "container.labels.desktop_docker_io/binds/1/Source": true, 194 | "container.labels.desktop_docker_io/binds/1/SourceKind": true, 195 | "container.labels.desktop_docker_io/binds/1/Target": true, 196 | "container.labels.desktop_docker_io/binds/2/Source": true, 197 | "container.labels.desktop_docker_io/binds/2/SourceKind": true, 198 | "container.labels.desktop_docker_io/binds/2/Target": true, 199 | "container.labels.io_k8s_description": true, 200 | "container.labels.io_k8s_display-name": true, 201 | "container.labels.license": true, 202 | "container.labels.maintainer": true, 203 | "container.labels.name": true, 204 | "container.labels.org_label-schema_build-date": true, 205 | "container.labels.org_label-schema_license": true, 206 | "container.labels.org_label-schema_name": true, 207 | "container.labels.org_label-schema_schema-version": true, 208 | "container.labels.org_label-schema_url": true, 209 | "container.labels.org_label-schema_usage": true, 210 | "container.labels.org_label-schema_vcs-ref": true, 211 | "container.labels.org_label-schema_vcs-url": true, 212 | "container.labels.org_label-schema_vendor": true, 213 | "container.labels.org_label-schema_version": true, 214 | "container.labels.org_opencontainers_image_created": true, 215 | "container.labels.org_opencontainers_image_documentation": true, 216 | "container.labels.org_opencontainers_image_licenses": true, 217 | "container.labels.org_opencontainers_image_revision": true, 218 | "container.labels.org_opencontainers_image_source": true, 219 | "container.labels.org_opencontainers_image_title": true, 220 | "container.labels.org_opencontainers_image_url": true, 221 | "container.labels.org_opencontainers_image_vendor": true, 222 | "container.labels.org_opencontainers_image_version": true, 223 | "container.labels.release": true, 224 | "container.labels.summary": true, 225 | "container.labels.url": true, 226 | "container.labels.vendor": true, 227 | "container.labels.version": true, 228 | "container.name": false, 229 | "ecs.version": true, 230 | "highlight": true, 231 | "host.name": true, 232 | "input.type": true, 233 | "log.file.path": true, 234 | "log.flags": true, 235 | "log.offset": true, 236 | "message": true, 237 | "msg.time": true, 238 | "sort": true, 239 | "stream": true 240 | }, 241 | "indexByName": { 242 | "@timestamp": 0, 243 | "_id": 1, 244 | "_index": 2, 245 | "_source": 3, 246 | "_type": 4, 247 | "agent.ephemeral_id": 5, 248 | "agent.hostname": 6, 249 | "agent.id": 7, 250 | "agent.name": 8, 251 | "agent.type": 9, 252 | "agent.version": 10, 253 | "container.id": 11, 254 | "container.image.name": 12, 255 | "container.labels.com_docker_compose_config-hash": 13, 256 | "container.labels.com_docker_compose_container-number": 14, 257 | "container.labels.com_docker_compose_oneoff": 15, 258 | "container.labels.com_docker_compose_project": 16, 259 | "container.labels.com_docker_compose_project_config_files": 17, 260 | "container.labels.com_docker_compose_project_working_dir": 18, 261 | "container.labels.com_docker_compose_service": 19, 262 | "container.labels.com_docker_compose_version": 20, 263 | "container.name": 21, 264 | "ecs.version": 22, 265 | "highlight": 23, 266 | "host.name": 24, 267 | "input.type": 25, 268 | "log.file.path": 26, 269 | "log.flags": 27, 270 | "log.offset": 28, 271 | "message": 29, 272 | "msg.class": 31, 273 | "msg.message": 32, 274 | "msg.severity": 30, 275 | "msg.spanId": 34, 276 | "msg.time": 35, 277 | "msg.traceid": 33, 278 | "sort": 36, 279 | "stream": 37 280 | }, 281 | "renameByName": { 282 | "@timestamp": "Timestamp", 283 | "container.name": "Container", 284 | "ecs.version": "", 285 | "msg.class": "Class", 286 | "msg.message": "Message", 287 | "msg.severity": "Severity", 288 | "msg.spanId": "SpanId", 289 | "msg.traceid": "TraceId" 290 | } 291 | } 292 | } 293 | ], 294 | "type": "table" 295 | }, 296 | { 297 | "datasource": "Elasticsearch", 298 | "fieldConfig": { 299 | "defaults": { 300 | "color": { 301 | "mode": "thresholds" 302 | }, 303 | "custom": { 304 | "align": null, 305 | "filterable": false 306 | }, 307 | "mappings": [], 308 | "thresholds": { 309 | "mode": "absolute", 310 | "steps": [ 311 | { 312 | "color": "green", 313 | "value": null 314 | }, 315 | { 316 | "color": "red", 317 | "value": 80 318 | } 319 | ] 320 | } 321 | }, 322 | "overrides": [ 323 | { 324 | "matcher": { 325 | "id": "byName", 326 | "options": "Timestamp" 327 | }, 328 | "properties": [ 329 | { 330 | "id": "custom.width", 331 | "value": 147 332 | } 333 | ] 334 | }, 335 | { 336 | "matcher": { 337 | "id": "byName", 338 | "options": "Container" 339 | }, 340 | "properties": [ 341 | { 342 | "id": "custom.width", 343 | "value": 134 344 | } 345 | ] 346 | }, 347 | { 348 | "matcher": { 349 | "id": "byName", 350 | "options": "Message" 351 | }, 352 | "properties": [ 353 | { 354 | "id": "custom.width", 355 | "value": 1524 356 | } 357 | ] 358 | }, 359 | { 360 | "matcher": { 361 | "id": "byName", 362 | "options": "Severity" 363 | }, 364 | "properties": [ 365 | { 366 | "id": "custom.width", 367 | "value": 72 368 | } 369 | ] 370 | }, 371 | { 372 | "matcher": { 373 | "id": "byName", 374 | "options": "Class" 375 | }, 376 | "properties": [ 377 | { 378 | "id": "custom.width", 379 | "value": 97 380 | } 381 | ] 382 | }, 383 | { 384 | "matcher": { 385 | "id": "byName", 386 | "options": "TraceId" 387 | }, 388 | "properties": [ 389 | { 390 | "id": "custom.width", 391 | "value": 144 392 | } 393 | ] 394 | } 395 | ] 396 | }, 397 | "gridPos": { 398 | "h": 17, 399 | "w": 24, 400 | "x": 0, 401 | "y": 17 402 | }, 403 | "id": 3, 404 | "options": { 405 | "showHeader": true, 406 | "sortBy": [ 407 | { 408 | "desc": false, 409 | "displayName": "Container" 410 | } 411 | ] 412 | }, 413 | "pluginVersion": "7.5.9", 414 | "targets": [ 415 | { 416 | "alias": "", 417 | "bucketAggs": [ 418 | { 419 | "field": "@timestamp", 420 | "id": "2", 421 | "settings": { 422 | "interval": "auto" 423 | }, 424 | "type": "date_histogram" 425 | } 426 | ], 427 | "hide": false, 428 | "metrics": [ 429 | { 430 | "id": "1", 431 | "type": "logs" 432 | } 433 | ], 434 | "query": "-container.name:*-app", 435 | "refId": "A", 436 | "timeField": "@timestamp" 437 | } 438 | ], 439 | "title": "System logs", 440 | "transformations": [ 441 | { 442 | "id": "organize", 443 | "options": { 444 | "excludeByName": { 445 | "_id": true, 446 | "_index": true, 447 | "_source": true, 448 | "_type": true, 449 | "agent.ephemeral_id": true, 450 | "agent.hostname": true, 451 | "agent.id": true, 452 | "agent.name": true, 453 | "agent.type": true, 454 | "agent.version": true, 455 | "container.id": true, 456 | "container.image.name": true, 457 | "container.labels.architecture": true, 458 | "container.labels.build-date": true, 459 | "container.labels.com_docker_compose_config-hash": true, 460 | "container.labels.com_docker_compose_container-number": true, 461 | "container.labels.com_docker_compose_oneoff": true, 462 | "container.labels.com_docker_compose_project": true, 463 | "container.labels.com_docker_compose_project_config_files": true, 464 | "container.labels.com_docker_compose_project_working_dir": true, 465 | "container.labels.com_docker_compose_service": true, 466 | "container.labels.com_docker_compose_version": true, 467 | "container.labels.com_redhat_build-host": true, 468 | "container.labels.com_redhat_component": true, 469 | "container.labels.com_redhat_license_terms": true, 470 | "container.labels.description": true, 471 | "container.labels.desktop_docker_io/binds/0/Source": true, 472 | "container.labels.desktop_docker_io/binds/0/SourceKind": true, 473 | "container.labels.desktop_docker_io/binds/0/Target": true, 474 | "container.labels.desktop_docker_io/binds/1/Source": true, 475 | "container.labels.desktop_docker_io/binds/1/SourceKind": true, 476 | "container.labels.desktop_docker_io/binds/1/Target": true, 477 | "container.labels.desktop_docker_io/binds/2/Source": true, 478 | "container.labels.desktop_docker_io/binds/2/SourceKind": true, 479 | "container.labels.desktop_docker_io/binds/2/Target": true, 480 | "container.labels.distribution-scope": true, 481 | "container.labels.io_confluent_docker": true, 482 | "container.labels.io_confluent_docker_build_number": true, 483 | "container.labels.io_confluent_docker_git_id": true, 484 | "container.labels.io_confluent_docker_git_repo": true, 485 | "container.labels.io_k8s_description": true, 486 | "container.labels.io_k8s_display-name": true, 487 | "container.labels.io_openshift_expose-services": true, 488 | "container.labels.io_openshift_tags": true, 489 | "container.labels.license": true, 490 | "container.labels.maintainer": true, 491 | "container.labels.name": true, 492 | "container.labels.org_label-schema_build-date": true, 493 | "container.labels.org_label-schema_license": true, 494 | "container.labels.org_label-schema_name": true, 495 | "container.labels.org_label-schema_schema-version": true, 496 | "container.labels.org_label-schema_url": true, 497 | "container.labels.org_label-schema_usage": true, 498 | "container.labels.org_label-schema_vcs-ref": true, 499 | "container.labels.org_label-schema_vcs-url": true, 500 | "container.labels.org_label-schema_vendor": true, 501 | "container.labels.org_label-schema_version": true, 502 | "container.labels.org_opencontainers_image_created": true, 503 | "container.labels.org_opencontainers_image_documentation": true, 504 | "container.labels.org_opencontainers_image_licenses": true, 505 | "container.labels.org_opencontainers_image_revision": true, 506 | "container.labels.org_opencontainers_image_source": true, 507 | "container.labels.org_opencontainers_image_title": true, 508 | "container.labels.org_opencontainers_image_url": true, 509 | "container.labels.org_opencontainers_image_vendor": true, 510 | "container.labels.org_opencontainers_image_version": true, 511 | "container.labels.release": true, 512 | "container.labels.summary": true, 513 | "container.labels.url": true, 514 | "container.labels.vcs-ref": true, 515 | "container.labels.vcs-type": true, 516 | "container.labels.vendor": true, 517 | "container.labels.version": true, 518 | "container.name": false, 519 | "ecs.version": true, 520 | "highlight": true, 521 | "host.name": true, 522 | "input.type": true, 523 | "log.file.path": true, 524 | "log.flags": true, 525 | "log.offset": true, 526 | "message": false, 527 | "msg.spanId": true, 528 | "msg.time": true, 529 | "msg.traceid": true, 530 | "sort": true, 531 | "stream": true 532 | }, 533 | "indexByName": { 534 | "@timestamp": 0, 535 | "_id": 1, 536 | "_index": 2, 537 | "_source": 3, 538 | "_type": 4, 539 | "agent.ephemeral_id": 5, 540 | "agent.hostname": 6, 541 | "agent.id": 7, 542 | "agent.name": 8, 543 | "agent.type": 9, 544 | "agent.version": 10, 545 | "container.id": 11, 546 | "container.image.name": 12, 547 | "container.labels.com_docker_compose_config-hash": 13, 548 | "container.labels.com_docker_compose_container-number": 14, 549 | "container.labels.com_docker_compose_oneoff": 15, 550 | "container.labels.com_docker_compose_project": 16, 551 | "container.labels.com_docker_compose_project_config_files": 17, 552 | "container.labels.com_docker_compose_project_working_dir": 18, 553 | "container.labels.com_docker_compose_service": 19, 554 | "container.labels.com_docker_compose_version": 20, 555 | "container.name": 21, 556 | "ecs.version": 22, 557 | "highlight": 23, 558 | "host.name": 24, 559 | "input.type": 25, 560 | "log.file.path": 26, 561 | "log.flags": 27, 562 | "log.offset": 28, 563 | "message": 29, 564 | "msg.class": 31, 565 | "msg.message": 32, 566 | "msg.severity": 30, 567 | "msg.spanId": 34, 568 | "msg.time": 35, 569 | "msg.traceid": 33, 570 | "sort": 36, 571 | "stream": 37 572 | }, 573 | "renameByName": { 574 | "@timestamp": "Timestamp", 575 | "container.name": "Container", 576 | "ecs.version": "", 577 | "message": "Message", 578 | "msg.class": "Class", 579 | "msg.message": "Message", 580 | "msg.severity": "Severity", 581 | "msg.spanId": "SpanId", 582 | "msg.traceid": "TraceId" 583 | } 584 | } 585 | } 586 | ], 587 | "type": "table" 588 | } 589 | ], 590 | "refresh": false, 591 | "schemaVersion": 27, 592 | "style": "dark", 593 | "tags": [], 594 | "templating": { 595 | "list": [ 596 | { 597 | "datasource": "Elasticsearch", 598 | "description": null, 599 | "error": null, 600 | "filters": [], 601 | "hide": 0, 602 | "label": null, 603 | "name": "Filters", 604 | "skipUrlSync": false, 605 | "type": "adhoc" 606 | } 607 | ] 608 | }, 609 | "time": { 610 | "from": "now-15m", 611 | "to": "now" 612 | }, 613 | "timepicker": {}, 614 | "timezone": "", 615 | "title": "Logs", 616 | "uid": "CmJOR93Gk", 617 | "version": 1 618 | } -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/all.yml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | providers: 3 | # an unique provider name. Required 4 | - name: 'default' 5 | # Org id. Default to 1 6 | orgId: 1 7 | # name of the dashboard folder. 8 | folder: '' 9 | # folder UID. will be automatically generated if not specified 10 | folderUid: '' 11 | # provider type. Default to 'file' 12 | type: file 13 | # disable dashboard deletion 14 | disableDeletion: false 15 | # how often Grafana will scan for changed dashboards 16 | updateIntervalSeconds: 10 17 | # allow updating provisioned dashboards from the UI 18 | allowUiUpdates: false 19 | options: 20 | # path to dashboard files on disk. Required when using the 'file' type 21 | path: /etc/grafana/provisioning/dashboards 22 | # use folder names from filesystem to create folders in Grafana 23 | foldersFromFilesStructure: true -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/jaeger.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ ] 4 | }, 5 | "editable": true, 6 | "gnetId": null, 7 | "graphTooltip": 0, 8 | "hideControls": false, 9 | "links": [ ], 10 | "refresh": "10s", 11 | "rows": [ 12 | { 13 | "collapse": false, 14 | "height": "250px", 15 | "panels": [ 16 | { 17 | "aliasColors": { 18 | "error": "#E24D42", 19 | "success": "#7EB26D" 20 | }, 21 | "bars": false, 22 | "dashLength": 10, 23 | "dashes": false, 24 | "datasource": "$datasource", 25 | "fill": 10, 26 | "id": 1, 27 | "legend": { 28 | "avg": false, 29 | "current": false, 30 | "max": false, 31 | "min": false, 32 | "show": true, 33 | "total": false, 34 | "values": false 35 | }, 36 | "lines": true, 37 | "linewidth": 0, 38 | "links": [ ], 39 | "nullPointMode": "null as zero", 40 | "percentage": false, 41 | "pointradius": 5, 42 | "points": false, 43 | "renderer": "flot", 44 | "seriesOverrides": [ ], 45 | "spaceLength": 10, 46 | "span": 6, 47 | "stack": true, 48 | "steppedLine": false, 49 | "targets": [ 50 | { 51 | "expr": "sum(rate(jaeger_tracer_reporter_spans_total{result=~\"dropped|err\"}[1m]))", 52 | "format": "time_series", 53 | "intervalFactor": 2, 54 | "legendFormat": "error", 55 | "refId": "A", 56 | "step": 10 57 | }, 58 | { 59 | "expr": "sum(rate(jaeger_tracer_reporter_spans_total[1m])) - sum(rate(jaeger_tracer_reporter_spans_total{result=~\"dropped|err\"}[1m]))", 60 | "format": "time_series", 61 | "intervalFactor": 2, 62 | "legendFormat": "success", 63 | "refId": "B", 64 | "step": 10 65 | } 66 | ], 67 | "thresholds": [ ], 68 | "timeFrom": null, 69 | "timeShift": null, 70 | "title": "span creation rate", 71 | "tooltip": { 72 | "shared": true, 73 | "sort": 0, 74 | "value_type": "individual" 75 | }, 76 | "type": "graph", 77 | "xaxis": { 78 | "buckets": null, 79 | "mode": "time", 80 | "name": null, 81 | "show": true, 82 | "values": [ ] 83 | }, 84 | "yaxes": [ 85 | { 86 | "format": "short", 87 | "label": null, 88 | "logBase": 1, 89 | "max": null, 90 | "min": 0, 91 | "show": true 92 | }, 93 | { 94 | "format": "short", 95 | "label": null, 96 | "logBase": 1, 97 | "max": null, 98 | "min": null, 99 | "show": false 100 | } 101 | ] 102 | }, 103 | { 104 | "aliasColors": { }, 105 | "bars": false, 106 | "dashLength": 10, 107 | "dashes": false, 108 | "datasource": "$datasource", 109 | "fill": 10, 110 | "id": 2, 111 | "legend": { 112 | "avg": false, 113 | "current": false, 114 | "max": false, 115 | "min": false, 116 | "show": true, 117 | "total": false, 118 | "values": false 119 | }, 120 | "lines": true, 121 | "linewidth": 0, 122 | "links": [ ], 123 | "nullPointMode": "null as zero", 124 | "percentage": false, 125 | "pointradius": 5, 126 | "points": false, 127 | "renderer": "flot", 128 | "seriesOverrides": [ ], 129 | "spaceLength": 10, 130 | "span": 6, 131 | "stack": true, 132 | "steppedLine": false, 133 | "targets": [ 134 | { 135 | "expr": "sum(rate(jaeger_tracer_reporter_spans_total{result=~\"dropped|err\"}[1m])) by (namespace) / sum(rate(jaeger_tracer_reporter_spans_total[1m])) by (namespace)", 136 | "format": "time_series", 137 | "intervalFactor": 2, 138 | "legendFormat": "{{namespace}}", 139 | "legendLink": null, 140 | "step": 10 141 | } 142 | ], 143 | "thresholds": [ ], 144 | "timeFrom": null, 145 | "timeShift": null, 146 | "title": "% spans dropped", 147 | "tooltip": { 148 | "shared": true, 149 | "sort": 0, 150 | "value_type": "individual" 151 | }, 152 | "type": "graph", 153 | "xaxis": { 154 | "buckets": null, 155 | "mode": "time", 156 | "name": null, 157 | "show": true, 158 | "values": [ ] 159 | }, 160 | "yaxes": [ 161 | { 162 | "format": "percentunit", 163 | "label": null, 164 | "logBase": 1, 165 | "max": 1, 166 | "min": 0, 167 | "show": true 168 | }, 169 | { 170 | "format": "short", 171 | "label": null, 172 | "logBase": 1, 173 | "max": null, 174 | "min": null, 175 | "show": false 176 | } 177 | ] 178 | } 179 | ], 180 | "repeat": null, 181 | "repeatIteration": null, 182 | "repeatRowId": null, 183 | "showTitle": true, 184 | "title": "Services", 185 | "titleSize": "h6" 186 | }, 187 | { 188 | "collapse": false, 189 | "height": "250px", 190 | "panels": [ 191 | { 192 | "aliasColors": { 193 | "error": "#E24D42", 194 | "success": "#7EB26D" 195 | }, 196 | "bars": false, 197 | "dashLength": 10, 198 | "dashes": false, 199 | "datasource": "$datasource", 200 | "fill": 10, 201 | "id": 3, 202 | "legend": { 203 | "avg": false, 204 | "current": false, 205 | "max": false, 206 | "min": false, 207 | "show": true, 208 | "total": false, 209 | "values": false 210 | }, 211 | "lines": true, 212 | "linewidth": 0, 213 | "links": [ ], 214 | "nullPointMode": "null as zero", 215 | "percentage": false, 216 | "pointradius": 5, 217 | "points": false, 218 | "renderer": "flot", 219 | "seriesOverrides": [ ], 220 | "spaceLength": 10, 221 | "span": 6, 222 | "stack": true, 223 | "steppedLine": false, 224 | "targets": [ 225 | { 226 | "expr": "sum(rate(jaeger_agent_reporter_batches_failures_total[1m]))", 227 | "format": "time_series", 228 | "intervalFactor": 2, 229 | "legendFormat": "error", 230 | "refId": "A", 231 | "step": 10 232 | }, 233 | { 234 | "expr": "sum(rate(jaeger_agent_reporter_batches_submitted_total[1m])) - sum(rate(jaeger_agent_reporter_batches_failures_total[1m]))", 235 | "format": "time_series", 236 | "intervalFactor": 2, 237 | "legendFormat": "success", 238 | "refId": "B", 239 | "step": 10 240 | } 241 | ], 242 | "thresholds": [ ], 243 | "timeFrom": null, 244 | "timeShift": null, 245 | "title": "batch ingest rate", 246 | "tooltip": { 247 | "shared": true, 248 | "sort": 0, 249 | "value_type": "individual" 250 | }, 251 | "type": "graph", 252 | "xaxis": { 253 | "buckets": null, 254 | "mode": "time", 255 | "name": null, 256 | "show": true, 257 | "values": [ ] 258 | }, 259 | "yaxes": [ 260 | { 261 | "format": "short", 262 | "label": null, 263 | "logBase": 1, 264 | "max": null, 265 | "min": 0, 266 | "show": true 267 | }, 268 | { 269 | "format": "short", 270 | "label": null, 271 | "logBase": 1, 272 | "max": null, 273 | "min": null, 274 | "show": false 275 | } 276 | ] 277 | }, 278 | { 279 | "aliasColors": { }, 280 | "bars": false, 281 | "dashLength": 10, 282 | "dashes": false, 283 | "datasource": "$datasource", 284 | "fill": 10, 285 | "id": 4, 286 | "legend": { 287 | "avg": false, 288 | "current": false, 289 | "max": false, 290 | "min": false, 291 | "show": true, 292 | "total": false, 293 | "values": false 294 | }, 295 | "lines": true, 296 | "linewidth": 0, 297 | "links": [ ], 298 | "nullPointMode": "null as zero", 299 | "percentage": false, 300 | "pointradius": 5, 301 | "points": false, 302 | "renderer": "flot", 303 | "seriesOverrides": [ ], 304 | "spaceLength": 10, 305 | "span": 6, 306 | "stack": true, 307 | "steppedLine": false, 308 | "targets": [ 309 | { 310 | "expr": "sum(rate(jaeger_agent_reporter_batches_failures_total[1m])) by (cluster) / sum(rate(jaeger_agent_reporter_batches_submitted_total[1m])) by (cluster)", 311 | "format": "time_series", 312 | "intervalFactor": 2, 313 | "legendFormat": "{{cluster}}", 314 | "legendLink": null, 315 | "step": 10 316 | } 317 | ], 318 | "thresholds": [ ], 319 | "timeFrom": null, 320 | "timeShift": null, 321 | "title": "% batches dropped", 322 | "tooltip": { 323 | "shared": true, 324 | "sort": 0, 325 | "value_type": "individual" 326 | }, 327 | "type": "graph", 328 | "xaxis": { 329 | "buckets": null, 330 | "mode": "time", 331 | "name": null, 332 | "show": true, 333 | "values": [ ] 334 | }, 335 | "yaxes": [ 336 | { 337 | "format": "percentunit", 338 | "label": null, 339 | "logBase": 1, 340 | "max": 1, 341 | "min": 0, 342 | "show": true 343 | }, 344 | { 345 | "format": "short", 346 | "label": null, 347 | "logBase": 1, 348 | "max": null, 349 | "min": null, 350 | "show": false 351 | } 352 | ] 353 | } 354 | ], 355 | "repeat": null, 356 | "repeatIteration": null, 357 | "repeatRowId": null, 358 | "showTitle": true, 359 | "title": "Agent", 360 | "titleSize": "h6" 361 | }, 362 | { 363 | "collapse": false, 364 | "height": "250px", 365 | "panels": [ 366 | { 367 | "aliasColors": { 368 | "error": "#E24D42", 369 | "success": "#7EB26D" 370 | }, 371 | "bars": false, 372 | "dashLength": 10, 373 | "dashes": false, 374 | "datasource": "$datasource", 375 | "fill": 10, 376 | "id": 5, 377 | "legend": { 378 | "avg": false, 379 | "current": false, 380 | "max": false, 381 | "min": false, 382 | "show": true, 383 | "total": false, 384 | "values": false 385 | }, 386 | "lines": true, 387 | "linewidth": 0, 388 | "links": [ ], 389 | "nullPointMode": "null as zero", 390 | "percentage": false, 391 | "pointradius": 5, 392 | "points": false, 393 | "renderer": "flot", 394 | "seriesOverrides": [ ], 395 | "spaceLength": 10, 396 | "span": 6, 397 | "stack": true, 398 | "steppedLine": false, 399 | "targets": [ 400 | { 401 | "expr": "sum(rate(jaeger_collector_spans_dropped_total[1m]))", 402 | "format": "time_series", 403 | "intervalFactor": 2, 404 | "legendFormat": "error", 405 | "refId": "A", 406 | "step": 10 407 | }, 408 | { 409 | "expr": "sum(rate(jaeger_collector_spans_received_total[1m])) - sum(rate(jaeger_collector_spans_dropped_total[1m]))", 410 | "format": "time_series", 411 | "intervalFactor": 2, 412 | "legendFormat": "success", 413 | "refId": "B", 414 | "step": 10 415 | } 416 | ], 417 | "thresholds": [ ], 418 | "timeFrom": null, 419 | "timeShift": null, 420 | "title": "span ingest rate", 421 | "tooltip": { 422 | "shared": true, 423 | "sort": 0, 424 | "value_type": "individual" 425 | }, 426 | "type": "graph", 427 | "xaxis": { 428 | "buckets": null, 429 | "mode": "time", 430 | "name": null, 431 | "show": true, 432 | "values": [ ] 433 | }, 434 | "yaxes": [ 435 | { 436 | "format": "short", 437 | "label": null, 438 | "logBase": 1, 439 | "max": null, 440 | "min": 0, 441 | "show": true 442 | }, 443 | { 444 | "format": "short", 445 | "label": null, 446 | "logBase": 1, 447 | "max": null, 448 | "min": null, 449 | "show": false 450 | } 451 | ] 452 | }, 453 | { 454 | "aliasColors": { }, 455 | "bars": false, 456 | "dashLength": 10, 457 | "dashes": false, 458 | "datasource": "$datasource", 459 | "fill": 10, 460 | "id": 6, 461 | "legend": { 462 | "avg": false, 463 | "current": false, 464 | "max": false, 465 | "min": false, 466 | "show": true, 467 | "total": false, 468 | "values": false 469 | }, 470 | "lines": true, 471 | "linewidth": 0, 472 | "links": [ ], 473 | "nullPointMode": "null as zero", 474 | "percentage": false, 475 | "pointradius": 5, 476 | "points": false, 477 | "renderer": "flot", 478 | "seriesOverrides": [ ], 479 | "spaceLength": 10, 480 | "span": 6, 481 | "stack": true, 482 | "steppedLine": false, 483 | "targets": [ 484 | { 485 | "expr": "sum(rate(jaeger_collector_spans_dropped_total[1m])) by (instance) / sum(rate(jaeger_collector_spans_received_total[1m])) by (instance)", 486 | "format": "time_series", 487 | "intervalFactor": 2, 488 | "legendFormat": "{{instance}}", 489 | "legendLink": null, 490 | "step": 10 491 | } 492 | ], 493 | "thresholds": [ ], 494 | "timeFrom": null, 495 | "timeShift": null, 496 | "title": "% spans dropped", 497 | "tooltip": { 498 | "shared": true, 499 | "sort": 0, 500 | "value_type": "individual" 501 | }, 502 | "type": "graph", 503 | "xaxis": { 504 | "buckets": null, 505 | "mode": "time", 506 | "name": null, 507 | "show": true, 508 | "values": [ ] 509 | }, 510 | "yaxes": [ 511 | { 512 | "format": "percentunit", 513 | "label": null, 514 | "logBase": 1, 515 | "max": 1, 516 | "min": 0, 517 | "show": true 518 | }, 519 | { 520 | "format": "short", 521 | "label": null, 522 | "logBase": 1, 523 | "max": null, 524 | "min": null, 525 | "show": false 526 | } 527 | ] 528 | } 529 | ], 530 | "repeat": null, 531 | "repeatIteration": null, 532 | "repeatRowId": null, 533 | "showTitle": true, 534 | "title": "Collector", 535 | "titleSize": "h6" 536 | }, 537 | { 538 | "collapse": false, 539 | "height": "250px", 540 | "panels": [ 541 | { 542 | "aliasColors": { }, 543 | "bars": false, 544 | "dashLength": 10, 545 | "dashes": false, 546 | "datasource": "$datasource", 547 | "fill": 10, 548 | "id": 7, 549 | "legend": { 550 | "avg": false, 551 | "current": false, 552 | "max": false, 553 | "min": false, 554 | "show": true, 555 | "total": false, 556 | "values": false 557 | }, 558 | "lines": true, 559 | "linewidth": 0, 560 | "links": [ ], 561 | "nullPointMode": "null as zero", 562 | "percentage": false, 563 | "pointradius": 5, 564 | "points": false, 565 | "renderer": "flot", 566 | "seriesOverrides": [ ], 567 | "spaceLength": 10, 568 | "span": 6, 569 | "stack": true, 570 | "steppedLine": false, 571 | "targets": [ 572 | { 573 | "expr": "jaeger_collector_queue_length", 574 | "format": "time_series", 575 | "intervalFactor": 2, 576 | "legendFormat": "{{instance}}", 577 | "legendLink": null, 578 | "step": 10 579 | } 580 | ], 581 | "thresholds": [ ], 582 | "timeFrom": null, 583 | "timeShift": null, 584 | "title": "span queue length", 585 | "tooltip": { 586 | "shared": true, 587 | "sort": 0, 588 | "value_type": "individual" 589 | }, 590 | "type": "graph", 591 | "xaxis": { 592 | "buckets": null, 593 | "mode": "time", 594 | "name": null, 595 | "show": true, 596 | "values": [ ] 597 | }, 598 | "yaxes": [ 599 | { 600 | "format": "short", 601 | "label": null, 602 | "logBase": 1, 603 | "max": null, 604 | "min": 0, 605 | "show": true 606 | }, 607 | { 608 | "format": "short", 609 | "label": null, 610 | "logBase": 1, 611 | "max": null, 612 | "min": null, 613 | "show": false 614 | } 615 | ] 616 | }, 617 | { 618 | "aliasColors": { }, 619 | "bars": false, 620 | "dashLength": 10, 621 | "dashes": false, 622 | "datasource": "$datasource", 623 | "fill": 1, 624 | "id": 8, 625 | "legend": { 626 | "avg": false, 627 | "current": false, 628 | "max": false, 629 | "min": false, 630 | "show": true, 631 | "total": false, 632 | "values": false 633 | }, 634 | "lines": true, 635 | "linewidth": 1, 636 | "links": [ ], 637 | "nullPointMode": "null as zero", 638 | "percentage": false, 639 | "pointradius": 5, 640 | "points": false, 641 | "renderer": "flot", 642 | "seriesOverrides": [ ], 643 | "spaceLength": 10, 644 | "span": 6, 645 | "stack": false, 646 | "steppedLine": false, 647 | "targets": [ 648 | { 649 | "expr": "histogram_quantile(0.95, sum(rate(jaeger_collector_in_queue_latency_bucket[1m])) by (le, instance))", 650 | "format": "time_series", 651 | "intervalFactor": 2, 652 | "legendFormat": "{{instance}}", 653 | "legendLink": null, 654 | "step": 10 655 | } 656 | ], 657 | "thresholds": [ ], 658 | "timeFrom": null, 659 | "timeShift": null, 660 | "title": "span queue time - 95 percentile", 661 | "tooltip": { 662 | "shared": true, 663 | "sort": 0, 664 | "value_type": "individual" 665 | }, 666 | "type": "graph", 667 | "xaxis": { 668 | "buckets": null, 669 | "mode": "time", 670 | "name": null, 671 | "show": true, 672 | "values": [ ] 673 | }, 674 | "yaxes": [ 675 | { 676 | "format": "short", 677 | "label": null, 678 | "logBase": 1, 679 | "max": null, 680 | "min": 0, 681 | "show": true 682 | }, 683 | { 684 | "format": "short", 685 | "label": null, 686 | "logBase": 1, 687 | "max": null, 688 | "min": null, 689 | "show": false 690 | } 691 | ] 692 | } 693 | ], 694 | "repeat": null, 695 | "repeatIteration": null, 696 | "repeatRowId": null, 697 | "showTitle": true, 698 | "title": "Collector Queue", 699 | "titleSize": "h6" 700 | }, 701 | { 702 | "collapse": false, 703 | "height": "250px", 704 | "panels": [ 705 | { 706 | "aliasColors": { 707 | "error": "#E24D42", 708 | "success": "#7EB26D" 709 | }, 710 | "bars": false, 711 | "dashLength": 10, 712 | "dashes": false, 713 | "datasource": "$datasource", 714 | "fill": 10, 715 | "id": 9, 716 | "legend": { 717 | "avg": false, 718 | "current": false, 719 | "max": false, 720 | "min": false, 721 | "show": true, 722 | "total": false, 723 | "values": false 724 | }, 725 | "lines": true, 726 | "linewidth": 0, 727 | "links": [ ], 728 | "nullPointMode": "null as zero", 729 | "percentage": false, 730 | "pointradius": 5, 731 | "points": false, 732 | "renderer": "flot", 733 | "seriesOverrides": [ ], 734 | "spaceLength": 10, 735 | "span": 6, 736 | "stack": true, 737 | "steppedLine": false, 738 | "targets": [ 739 | { 740 | "expr": "sum(rate(jaeger_query_requests_total{result=\"err\"}[1m]))", 741 | "format": "time_series", 742 | "intervalFactor": 2, 743 | "legendFormat": "error", 744 | "refId": "A", 745 | "step": 10 746 | }, 747 | { 748 | "expr": "sum(rate(jaeger_query_requests_total[1m])) - sum(rate(jaeger_query_requests_total{result=\"err\"}[1m]))", 749 | "format": "time_series", 750 | "intervalFactor": 2, 751 | "legendFormat": "success", 752 | "refId": "B", 753 | "step": 10 754 | } 755 | ], 756 | "thresholds": [ ], 757 | "timeFrom": null, 758 | "timeShift": null, 759 | "title": "qps", 760 | "tooltip": { 761 | "shared": true, 762 | "sort": 0, 763 | "value_type": "individual" 764 | }, 765 | "type": "graph", 766 | "xaxis": { 767 | "buckets": null, 768 | "mode": "time", 769 | "name": null, 770 | "show": true, 771 | "values": [ ] 772 | }, 773 | "yaxes": [ 774 | { 775 | "format": "short", 776 | "label": null, 777 | "logBase": 1, 778 | "max": null, 779 | "min": 0, 780 | "show": true 781 | }, 782 | { 783 | "format": "short", 784 | "label": null, 785 | "logBase": 1, 786 | "max": null, 787 | "min": null, 788 | "show": false 789 | } 790 | ] 791 | }, 792 | { 793 | "aliasColors": { }, 794 | "bars": false, 795 | "dashLength": 10, 796 | "dashes": false, 797 | "datasource": "$datasource", 798 | "fill": 10, 799 | "id": 10, 800 | "legend": { 801 | "avg": false, 802 | "current": false, 803 | "max": false, 804 | "min": false, 805 | "show": true, 806 | "total": false, 807 | "values": false 808 | }, 809 | "lines": true, 810 | "linewidth": 0, 811 | "links": [ ], 812 | "nullPointMode": "null as zero", 813 | "percentage": false, 814 | "pointradius": 5, 815 | "points": false, 816 | "renderer": "flot", 817 | "seriesOverrides": [ ], 818 | "spaceLength": 10, 819 | "span": 6, 820 | "stack": true, 821 | "steppedLine": false, 822 | "targets": [ 823 | { 824 | "expr": "histogram_quantile(0.99, sum(rate(jaeger_query_latency_bucket[1m])) by (le, instance))", 825 | "format": "time_series", 826 | "intervalFactor": 2, 827 | "legendFormat": "{{instance}}", 828 | "legendLink": null, 829 | "step": 10 830 | } 831 | ], 832 | "thresholds": [ ], 833 | "timeFrom": null, 834 | "timeShift": null, 835 | "title": "latency - 99 percentile", 836 | "tooltip": { 837 | "shared": true, 838 | "sort": 0, 839 | "value_type": "individual" 840 | }, 841 | "type": "graph", 842 | "xaxis": { 843 | "buckets": null, 844 | "mode": "time", 845 | "name": null, 846 | "show": true, 847 | "values": [ ] 848 | }, 849 | "yaxes": [ 850 | { 851 | "format": "short", 852 | "label": null, 853 | "logBase": 1, 854 | "max": null, 855 | "min": 0, 856 | "show": true 857 | }, 858 | { 859 | "format": "short", 860 | "label": null, 861 | "logBase": 1, 862 | "max": null, 863 | "min": null, 864 | "show": false 865 | } 866 | ] 867 | } 868 | ], 869 | "repeat": null, 870 | "repeatIteration": null, 871 | "repeatRowId": null, 872 | "showTitle": true, 873 | "title": "Query", 874 | "titleSize": "h6" 875 | } 876 | ], 877 | "schemaVersion": 14, 878 | "style": "dark", 879 | "tags": [ ], 880 | "templating": { 881 | "list": [ 882 | { 883 | "current": { 884 | "text": "Prometheus", 885 | "value": "Prometheus" 886 | }, 887 | "hide": 0, 888 | "label": null, 889 | "name": "datasource", 890 | "options": [ ], 891 | "query": "prometheus", 892 | "refresh": 1, 893 | "regex": "", 894 | "type": "datasource" 895 | } 896 | ] 897 | }, 898 | "time": { 899 | "from": "now-1h", 900 | "to": "now" 901 | }, 902 | "timepicker": { 903 | "refresh_intervals": [ 904 | "5s", 905 | "10s", 906 | "30s", 907 | "1m", 908 | "5m", 909 | "15m", 910 | "30m", 911 | "1h", 912 | "2h", 913 | "1d" 914 | ], 915 | "time_options": [ 916 | "5m", 917 | "15m", 918 | "1h", 919 | "6h", 920 | "12h", 921 | "24h", 922 | "2d", 923 | "7d", 924 | "30d" 925 | ] 926 | }, 927 | "timezone": "utc", 928 | "title": "Jaeger", 929 | "uid": "", 930 | "version": 0 931 | } 932 | -------------------------------------------------------------------------------- /grafana/provisioning/datasources/datasource.yml: -------------------------------------------------------------------------------- 1 | # config file version 2 | apiVersion: 1 3 | 4 | # list of datasources that should be deleted from the database 5 | deleteDatasources: 6 | - name: Prometheus 7 | orgId: 1 8 | 9 | # list of datasources to insert/update depending 10 | # whats available in the database 11 | datasources: 12 | - name: Prometheus 13 | uid: gdev-prometheus 14 | type: prometheus 15 | access: proxy 16 | orgId: 1 17 | url: http://prometheus:9090 18 | password: admin 19 | user: admin 20 | database: 21 | basicAuth: true 22 | basicAuthUser: admin 23 | basicAuthPassword: admin 24 | withCredentials: 25 | isDefault: true 26 | jsonData: 27 | graphiteVersion: "1.1" 28 | tlsAuth: false 29 | tlsAuthWithCACert: false 30 | secureJsonData: 31 | tlsCACert: "..." 32 | tlsClientCert: "..." 33 | tlsClientKey: "..." 34 | version: 1 35 | editable: true 36 | - name: Elasticsearch 37 | uid: 'logs-elastic' 38 | orgId: 1 39 | type: elasticsearch 40 | typeName: Elasticsearch 41 | access: proxy 42 | url: http://elasticsearch:9200 43 | password: 'elastic' 44 | user: 'elastic' 45 | database: "[filebeat-]YYYY.MM.DD" 46 | basicAuth: true 47 | isDefault: false 48 | jsonData: 49 | esVersion: 70 50 | interval: Daily 51 | logLevelField: '' 52 | logMessageField: 'message' 53 | maxConcurrentShardRequests: 5 54 | timeField: "@timestamp" 55 | readOnly: false 56 | editable: true 57 | - name: Jaeger 58 | type: jaeger 59 | uid: gdev-jaeger 60 | access: proxy 61 | url: http://jaeger:16686 62 | editable: true 63 | jsonData: 64 | tlsSkipVerify: true 65 | tracesToLogsV2: 66 | customQuery: true 67 | datasourceUid: 'logs-elastic' 68 | spanStartTimeShift: '-2h' 69 | spanEndTimeShift: '2h' 70 | # Filtering by TraceID 71 | filterBySpanID: false 72 | filterByTraceID: true 73 | query: 'msg.traceid:"$${__span.traceId}"' 74 | 75 | # Filtering by SpanID 76 | #filterBySpanID: true 77 | #filterByTraceID: false 78 | #query: 'msg.spanId:"$${__span.spanId}"' 79 | tags: [] 80 | tracesToMetrics: 81 | datasourceUid: 'gdev-prometheus' 82 | queries: 83 | - name: CPU utilization 84 | query: 'system_cpu_usage{$$__tags}' 85 | spanEndTimeShift: '2m' 86 | spanStartTimeShift: '-2m' 87 | tags: 88 | - key: application 89 | value: exported_job -------------------------------------------------------------------------------- /gravitee/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | networks: 4 | frontend: 5 | name: frontend 6 | storage: 7 | name: storage 8 | 9 | volumes: 10 | data-elasticsearch: 11 | data-mongo: 12 | 13 | services: 14 | mongodb: 15 | image: mongo:${MONGODB_VERSION:-3.6} 16 | container_name: gio_apim_mongodb 17 | restart: always 18 | volumes: 19 | - data-mongo:/data/db 20 | # - ./logs/apim-mongodb:/var/log/mongodb 21 | networks: 22 | - storage 23 | 24 | elasticsearch: 25 | image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION:-7.7.0} 26 | container_name: gio_apim_elasticsearch 27 | restart: always 28 | volumes: 29 | - data-elasticsearch:/usr/share/elasticsearch/data 30 | environment: 31 | - http.host=0.0.0.0 32 | - transport.host=0.0.0.0 33 | - xpack.security.enabled=false 34 | - xpack.monitoring.enabled=false 35 | - cluster.name=elasticsearch 36 | - bootstrap.memory_lock=true 37 | - discovery.type=single-node 38 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 39 | ulimits: 40 | memlock: 41 | soft: -1 42 | hard: -1 43 | nofile: 65536 44 | networks: 45 | - storage 46 | 47 | gateway: 48 | image: graviteeio/apim-gateway:${APIM_VERSION:-3} 49 | container_name: gio_apim_gateway 50 | restart: always 51 | ports: 52 | - "8082:8082" 53 | depends_on: 54 | - mongodb 55 | - elasticsearch 56 | # volumes: 57 | # - ./logs/apim-gateway:/opt/graviteeio-gateway/logs 58 | environment: 59 | - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 60 | - gravitee_ratelimit_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 61 | - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200 62 | networks: 63 | - storage 64 | - frontend 65 | 66 | management_api: 67 | image: graviteeio/apim-management-api:${APIM_VERSION:-3} 68 | container_name: gio_apim_management_api 69 | restart: always 70 | ports: 71 | - "8083:8083" 72 | links: 73 | - mongodb 74 | - elasticsearch 75 | depends_on: 76 | - mongodb 77 | - elasticsearch 78 | # volumes: 79 | # - ./logs/apim-management-api:/opt/graviteeio-management-api/logs 80 | environment: 81 | - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 82 | - gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200 83 | networks: 84 | - storage 85 | - frontend 86 | 87 | management_ui: 88 | image: graviteeio/apim-management-ui:${APIM_VERSION:-3} 89 | container_name: gio_apim_management_ui 90 | restart: always 91 | ports: 92 | - "8084:8080" 93 | depends_on: 94 | - management_api 95 | environment: 96 | - MGMT_API_URL=http://localhost:8083/management/organizations/DEFAULT/environments/DEFAULT/ 97 | # volumes: 98 | # - ./logs/apim-management-ui:/var/log/nginx 99 | networks: 100 | - frontend 101 | 102 | portal_ui: 103 | image: graviteeio/apim-portal-ui:${APIM_VERSION:-3} 104 | container_name: gio_apim_portal_ui 105 | restart: always 106 | ports: 107 | - "8085:8080" 108 | depends_on: 109 | - management_api 110 | environment: 111 | - PORTAL_API_URL=http://localhost:8083/portal/environments/DEFAULT 112 | # volumes: 113 | # - ./logs/apim-portal-ui:/var/log/nginx 114 | networks: 115 | - frontend -------------------------------------------------------------------------------- /jaeger/README.md: -------------------------------------------------------------------------------- 1 | # Jaeger details 2 | ## Streaming deployment strategy 3 | 1. Start infrastructure 4 | ``` 5 | docker-compose -f compose.yml -f kafka/compose-cp.yml -f elasticsearch/compose.yml up 6 | ``` 7 | 2. Start Jaeger components 8 | ``` 9 | docker-compose -f compose.yml -f jaeger/streaming.yml up 10 | ``` 11 | 3. Start demo-apps 12 | ``` 13 | docker-compose -f compose.yml -f demo-apps/compose.yml up 14 | ``` 15 | 4. Send several requests to demo-apps to generate traces 16 | ``` 17 | curl http://127.0.0.1:8080/camel/bookTrip 18 | ``` 19 | ## Jaeger UI 20 | http://localhost:16686/ 21 | -------------------------------------------------------------------------------- /jaeger/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | jaeger: 6 | image: jaegertracing/jaeger:2.3.0 7 | container_name: jaeger 8 | restart: always 9 | ports: 10 | - 16686:16686 11 | # - 4317:4317 # OTLP gRPC receiver 12 | # - 4318:4318 # OTLP HTTP receiver 13 | - 5778:5778 14 | - 9411:9411 -------------------------------------------------------------------------------- /jaeger/streaming.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | jaeger-collector: 5 | image: jaegertracing/jaeger-collector:1.66.0 6 | container_name: jaeger 7 | restart: on-failure 8 | command: 9 | - "--collector.zipkin.host-port=9411" 10 | - "--kafka.producer.topic=jaeger" 11 | - "--kafka.producer.brokers=kafka:9092" 12 | - "--kafka.producer.encoding=json" 13 | environment: 14 | - SPAN_STORAGE_TYPE=kafka 15 | ports: 16 | - "14250:14250" 17 | - "14269:14269" #Port for metrics in Prometheus format. Please use /metrics endpoint 18 | - "9411:9411" #Port for receiving traces in Zipkin format 19 | 20 | jaeger-ingester: 21 | image: jaegertracing/jaeger-ingester:1.66.0 22 | container_name: jaeger-ingester 23 | restart: on-failure 24 | command: 25 | - "--es.server-urls=http://elasticsearch:9200" 26 | - "--kafka.consumer.brokers=kafka:9092" 27 | - "--kafka.consumer.topic=jaeger" 28 | - "--kafka.consumer.encoding=json" 29 | environment: 30 | - SPAN_STORAGE_TYPE=elasticsearch 31 | ports: 32 | - "14270:14270" #Port for metrics in Prometheus format. Please use /metrics endpoint 33 | 34 | jaeger-query: 35 | image: jaegertracing/jaeger-query:1.66.0 36 | container_name: jaeger-query 37 | restart: on-failure 38 | command: 39 | - "--es.server-urls=http://elasticsearch:9200" 40 | environment: 41 | - SPAN_STORAGE_TYPE=elasticsearch 42 | ports: 43 | - "16686:16686" #Port for UI 44 | - "16687:16687" #Port for metrics in Prometheus format. Please use /metrics endpoint -------------------------------------------------------------------------------- /kafka-rest-proxy/compose-cp.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | rest-proxy: 6 | image: confluentinc/cp-kafka-rest:7.2.5 7 | container_name: rest-proxy 8 | hostname: rest-proxy 9 | environment: 10 | - KAFKA_REST_HOST_NAME=rest-proxy 11 | - KAFKA_REST_LISTENERS=http://0.0.0.0:8082 12 | - KAFKA_REST_BOOTSTRAP_SERVERS=kafka:9092 13 | - KAFKA_REST_CLIENT_BOOTSTRAP_SERVERS=kafka:9092 14 | ports: 15 | - 8082:8082 -------------------------------------------------------------------------------- /kafka/compose-bitnami.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | kafka: 5 | image: bitnami/kafka:4.0 6 | container_name: kafka 7 | restart: always 8 | environment: 9 | KAFKA_CFG_NODE_ID: 0 10 | KAFKA_CFG_PROCESS_ROLES: broker,controller 11 | KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 12 | KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094 13 | KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT 14 | KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka:9093 15 | KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER 16 | ports: 17 | - 9092:9092 18 | - 9094:9094 #use this port to connect from outside the container 19 | -------------------------------------------------------------------------------- /kafka/compose-cp.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | zookeeper: 6 | image: confluentinc/cp-zookeeper:7.2.5 7 | container_name: zookeeper 8 | environment: 9 | - ZOOKEEPER_CLIENT_PORT=2181 10 | - ZOOKEEPER_TICK_TIME=2000 11 | - ZOOKEEPER_SYNC_LIMIT=2 12 | ports: 13 | - 2181:2181 14 | kafka: 15 | image: confluentinc/cp-kafka:7.2.5 16 | container_name: kafka 17 | depends_on: 18 | - zookeeper 19 | ports: 20 | - 9092:9092 21 | environment: 22 | - KAFKA_BROKER_ID=1 23 | - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 24 | - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 25 | - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 26 | -------------------------------------------------------------------------------- /kafka/compose-landoop.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | kafka-all-in-one: 6 | image: landoop/fast-data-dev:3.6 7 | container_name: kafka-all-in-one 8 | restart: always 9 | environment: 10 | - ADV_HOST=127.0.0.1 11 | ports: 12 | - 2181:2181 13 | - 3030:3030 14 | - 8081:8081 15 | - 8082:8082 16 | - 8083:8083 17 | - 9092:9092 -------------------------------------------------------------------------------- /kafka/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | kafka: 6 | image: apache/kafka:3.8.1 7 | container_name: kafka 8 | restart: always 9 | environment: 10 | KAFKA_NODE_ID: 1 11 | KAFKA_PROCESS_ROLES: broker,controller 12 | KAFKA_LISTENERS: PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093 13 | KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 14 | KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER 15 | KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT 16 | KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 17 | KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 18 | KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 19 | KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 20 | KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 21 | KAFKA_NUM_PARTITIONS: 3 22 | ports: 23 | - 9092:9092 -------------------------------------------------------------------------------- /keycloak/compose-cluster.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | volumes: 4 | postgres_data: 5 | driver: local 6 | 7 | services: 8 | postgres: 9 | image: 'postgres:alpine' 10 | volumes: 11 | - postgres_data:/var/lib/postgresql/data 12 | restart: 'always' 13 | ports: 14 | - 5432:5432 15 | environment: 16 | POSTGRES_USER: keycloak 17 | POSTGRES_PASSWORD: password 18 | POSTGRES_DB: keycloak 19 | POSTGRES_HOST: postgres 20 | 21 | traefik: 22 | image: library/traefik:1.7 23 | container_name: traefik 24 | volumes: 25 | - /var/run/docker.sock:/var/run/docker.sock 26 | command: > 27 | --logLevel=INFO 28 | --api.dashboard 29 | --docker 30 | --entrypoints="Name:http Address::80" 31 | --defaultentrypoints="http" 32 | ports: 33 | - 8080:80 34 | - 3000:8080 35 | 36 | keycloak: 37 | # image: jboss/keycloak:12.0.4 38 | image: quay.io/keycloak/keycloak:12.0.4 39 | environment: 40 | DB_VENDOR: postgres 41 | DB_ADDR: postgres 42 | DB_PORT: 5432 43 | DB_DATABASE: keycloak 44 | DB_USER: keycloak 45 | DB_PASSWORD: password 46 | KEYCLOAK_USER: admin 47 | KEYCLOAK_PASSWORD: admin 48 | KEYCLOAK_LOGLEVEL: INFO 49 | JGROUPS_DISCOVERY_PROTOCOL: JDBC_PING 50 | JGROUPS_DISCOVERY_PROPERTIES: datasource_jndi_name=java:jboss/datasources/KeycloakDS,info_writer_sleep_time=500,initialize_sql="CREATE TABLE IF NOT EXISTS JGROUPSPING ( own_addr varchar(200) NOT NULL, cluster_name varchar(200) NOT NULL, created timestamp default current_timestamp, ping_data BYTEA, constraint PK_JGROUPSPING PRIMARY KEY (own_addr, cluster_name))" 51 | CACHE_OWNERS_AUTH_SESSIONS_COUNT: 2 52 | CACHE_OWNERS_COUNT: 2 53 | command: "-Dkeycloak.profile.feature.upload_scripts=enabled" 54 | depends_on: 55 | - postgres 56 | labels: 57 | traefik.enable: true 58 | traefik.port: 8080 59 | traefik.protocol: http 60 | traefik.frontend.rule: Host:localhost 61 | traefik.frontend.passHostHeader: true 62 | # traefik.backend.loadbalancer.stickiness: true -------------------------------------------------------------------------------- /keycloak/compose-metrics.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | keycloak: 6 | # image: jboss/keycloak:12.0.4 7 | image: quay.io/keycloak/keycloak:12.0.4 8 | container_name: keycloak 9 | environment: 10 | KEYCLOAK_USER: admin 11 | KEYCLOAK_PASSWORD: admin 12 | KEYCLOAK_LOGLEVEL: INFO 13 | command: "-Dkeycloak.profile.feature.upload_scripts=enabled" 14 | ports: 15 | - 8080:8080 16 | volumes: 17 | - ./keycloak/providers/:/opt/jboss/keycloak/providers/ -------------------------------------------------------------------------------- /keycloak/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | keycloak: 6 | ##--- KEYCLOAK 12.0.4 --- 7 | # image: quay.io/keycloak/keycloak:12.0.4 8 | # container_name: keycloak 9 | # environment: 10 | # KEYCLOAK_USER: admin 11 | # KEYCLOAK_PASSWORD: admin 12 | # KEYCLOAK_LOGLEVEL: INFO 13 | # command: "-Dkeycloak.profile.feature.upload_scripts=enabled" 14 | # ports: 15 | # - 8080:8080 16 | 17 | ###--- KEYCLOAK 19.0.2 --- 18 | image: quay.io/keycloak/keycloak:19.0.2 19 | container_name: keycloak 20 | environment: 21 | KEYCLOAK_ADMIN: admin 22 | KEYCLOAK_ADMIN_PASSWORD: admin 23 | KEYCLOAK_LOGLEVEL: INFO 24 | command: "-Dkeycloak.profile.feature.upload_scripts=enabled start-dev" 25 | ports: 26 | - 8080:8080 -------------------------------------------------------------------------------- /keycloak/initializer.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | kc-init: 5 | # Sources: https://github.com/stn1slv/keycloak-initializer 6 | image: stn1slv/keycloak-dev-data:1.0 7 | container_name: kc-init 8 | environment: 9 | KEYCLOAK_USER: admin 10 | KEYCLOAK_PASSWORD: admin 11 | KEYCLOAK_ENDPOINT: http://keycloak:8080/ 12 | KEYCLOAK_REALM: registry # realm name for creation users and clints -------------------------------------------------------------------------------- /keycloak/providers/keycloak-metrics-spi-2.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stn1slv/docker-envs/8345ebbf023b40dd7c478185e94a6c0522e5f8bd/keycloak/providers/keycloak-metrics-spi-2.4.0.jar -------------------------------------------------------------------------------- /kibana/compose-opendistro.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | kibana: 6 | build: kibana/opendistro 7 | container_name: kibana 8 | environment: 9 | - ELASTICSEARCH_URL=http://elasticsearch:9200 10 | - ELASTICSEARCH_HOSTS=["http://elasticsearch:9200"] 11 | ports: 12 | - 5601:5601 -------------------------------------------------------------------------------- /kibana/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | kibana: 6 | image: docker.elastic.co/kibana/kibana-oss:7.10.2 7 | # build: kibana #OpenDistro for ElasticSearch Kibana 8 | container_name: kibana 9 | environment: 10 | - ELASTICSEARCH_URL=http://elasticsearch:9200 11 | - ELASTICSEARCH_HOSTS=["http://elasticsearch:9200"] 12 | ports: 13 | - 5601:5601 -------------------------------------------------------------------------------- /kibana/opendistro/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amazon/opendistro-for-elasticsearch-kibana:1.13.2 2 | RUN /usr/share/kibana/bin/kibana-plugin remove opendistroSecurityKibana 3 | COPY --chown=kibana:kibana kibana.yml /usr/share/kibana/config/ -------------------------------------------------------------------------------- /kibana/opendistro/kibana.yml: -------------------------------------------------------------------------------- 1 | server.name: kibana 2 | server.host: "0" 3 | elasticsearch.hosts: http://localhost:9200 -------------------------------------------------------------------------------- /kong/compose-free-mode.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | ####################################### 5 | # Postgres: The database used by Kong 6 | ####################################### 7 | kong-database: 8 | image: postgres:9.6 9 | container_name: kong-postgres 10 | restart: on-failure 11 | networks: 12 | - kong-net 13 | volumes: 14 | - kong_data:/var/lib/postgresql/data 15 | environment: 16 | POSTGRES_USER: kong 17 | POSTGRES_PASSWORD: kong 18 | POSTGRES_DB: kong 19 | ports: 20 | - "5432:5432" 21 | healthcheck: 22 | test: ["CMD", "pg_isready", "-U", "kong"] 23 | interval: 30s 24 | timeout: 30s 25 | retries: 3 26 | 27 | ####################################### 28 | # Kong database migration 29 | ####################################### 30 | kong-migration: 31 | image: kong/kong-gateway:3.4 32 | command: kong migrations up 33 | networks: 34 | - kong-net 35 | restart: on-failure 36 | environment: 37 | KONG_DATABASE: postgres 38 | KONG_PG_HOST: kong-database 39 | KONG_PG_DATABASE: kong 40 | KONG_PG_USER: kong 41 | KONG_PG_PASSWORD: kong 42 | depends_on: 43 | - kong-database 44 | 45 | ####################################### 46 | # Kong: The API Gateway 47 | ####################################### 48 | kong: 49 | image: kong/kong-gateway:3.4 50 | restart: on-failure 51 | networks: 52 | - kong-net 53 | environment: 54 | KONG_DATABASE: postgres 55 | KONG_PG_HOST: kong-database 56 | KONG_PG_DATABASE: kong 57 | KONG_PG_USER: kong 58 | KONG_PG_PASSWORD: kong 59 | KONG_PROXY_LISTEN: 0.0.0.0:8000 60 | KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443 61 | KONG_ADMIN_LISTEN: 0.0.0.0:8001 62 | KONG_ADMIN_GUI_URL: http://0.0.0.0:8002 63 | depends_on: 64 | - kong-database 65 | healthcheck: 66 | test: ["CMD", "kong", "health"] 67 | interval: 10s 68 | timeout: 10s 69 | retries: 10 70 | ports: 71 | - "8000:8000" 72 | - "8001:8001" 73 | - "8002:8002" 74 | - "8443:8443" 75 | - "8444:8444" 76 | 77 | volumes: 78 | kong_data: {} 79 | 80 | networks: 81 | kong-net: 82 | -------------------------------------------------------------------------------- /kong/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | ####################################### 5 | # Postgres: The database used by Kong 6 | ####################################### 7 | kong-database: 8 | image: postgres:9.6 9 | container_name: kong-postgres 10 | restart: on-failure 11 | networks: 12 | - kong-net 13 | volumes: 14 | - kong_data:/var/lib/postgresql/data 15 | environment: 16 | POSTGRES_USER: kong 17 | POSTGRES_PASSWORD: kong 18 | POSTGRES_DB: kong 19 | ports: 20 | - "5432:5432" 21 | healthcheck: 22 | test: ["CMD", "pg_isready", "-U", "kong"] 23 | interval: 30s 24 | timeout: 30s 25 | retries: 3 26 | 27 | ####################################### 28 | # Kong database migration 29 | ####################################### 30 | kong-migration: 31 | image: kong:3.4 32 | command: kong migrations up 33 | networks: 34 | - kong-net 35 | restart: on-failure 36 | environment: 37 | KONG_DATABASE: postgres 38 | KONG_PG_HOST: kong-database 39 | KONG_PG_DATABASE: kong 40 | KONG_PG_USER: kong 41 | KONG_PG_PASSWORD: kong 42 | depends_on: 43 | - kong-database 44 | 45 | ####################################### 46 | # Kong: The API Gateway 47 | ####################################### 48 | kong: 49 | image: kong:3.4 50 | restart: on-failure 51 | networks: 52 | - kong-net 53 | environment: 54 | KONG_DATABASE: postgres 55 | KONG_PG_HOST: kong-database 56 | KONG_PG_DATABASE: kong 57 | KONG_PG_USER: kong 58 | KONG_PG_PASSWORD: kong 59 | KONG_PROXY_LISTEN: 0.0.0.0:8000 60 | KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443 61 | KONG_ADMIN_LISTEN: 0.0.0.0:8001 62 | depends_on: 63 | - kong-database 64 | healthcheck: 65 | test: ["CMD", "kong", "health"] 66 | interval: 10s 67 | timeout: 10s 68 | retries: 10 69 | ports: 70 | - "8000:8000" 71 | - "8001:8001" 72 | - "8443:8443" 73 | - "8444:8444" 74 | 75 | volumes: 76 | kong_data: {} 77 | 78 | networks: 79 | kong-net: 80 | -------------------------------------------------------------------------------- /microcks/compose-async-addon.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | mongo: 5 | image: mongo:4.4.6 6 | user: mongodb 7 | container_name: microcks-db 8 | ports: 9 | - 27017:27017 10 | 11 | microcks-sso: 12 | image: jboss/keycloak:14.0.0 13 | container_name: microcks-sso 14 | ports: 15 | - "18080:8080" 16 | environment: 17 | DB_VENDOR: "h2" 18 | KEYCLOAK_USER: "admin" 19 | KEYCLOAK_PASSWORD: "admin" 20 | KEYCLOAK_IMPORT: "/tmp/microcks-realm.json" 21 | KEYCLOAK_FRONTEND_URL: "http://localhost:18080/auth" 22 | volumes: 23 | - "./microcks/keycloak-realm/microcks-realm-sample.json:/tmp/microcks-realm.json" 24 | 25 | postman: 26 | image: quay.io/microcks/microcks-postman-runtime:latest 27 | container_name: microcks-postman-runtime 28 | 29 | microcks: 30 | depends_on: 31 | - mongo 32 | - microcks-sso 33 | - postman 34 | image: quay.io/microcks/microcks:1.7.1 35 | container_name: microcks 36 | ports: 37 | - "8080:8080" 38 | - "9090:9090" 39 | environment: 40 | - SPRING_PROFILES_ACTIVE=prod 41 | - SPRING_DATA_MONGODB_URI=mongodb://mongo:27017 42 | - SPRING_DATA_MONGODB_DATABASE=microcks 43 | - POSTMAN_RUNNER_URL=http://postman:3000 44 | - TEST_CALLBACK_URL=http://microcks:8080 45 | - SERVICES_UPDATE_INTERVAL=0 0 0/2 * * * 46 | - KEYCLOAK_URL=http://microcks-sso:8080/auth 47 | - KEYCLOAK_PUBLIC_URL=http://localhost:18080/auth 48 | - ASYNC_MINION_URL=http://microcks-async-minion:8081 49 | - KAFKA_BOOTSTRAP_SERVER=kafka:19092 50 | #- MAX_UPLOAD_FILE_SIZE=3MB 51 | volumes: 52 | - "./microcks/config:/deployments/config" 53 | 54 | async-minion: 55 | depends_on: 56 | - microcks 57 | ports: 58 | - "8081:8081" 59 | image: quay.io/microcks/microcks-async-minion:1.7.1 60 | container_name: microcks-async-minion 61 | restart: on-failure 62 | volumes: 63 | - "./microcks/config:/deployments/config" 64 | environment: 65 | - QUARKUS_PROFILE=docker-compose 66 | 67 | zookeeper: 68 | image: quay.io/strimzi/kafka:0.30.0-kafka-3.1.0 69 | container_name: microcks-zookeeper 70 | command: [ 71 | "sh", "-c", "bin/zookeeper-server-start.sh config/zookeeper.properties" 72 | ] 73 | ports: 74 | - "2181:2181" 75 | environment: 76 | LOG_DIR: /tmp/logs 77 | 78 | kafka: 79 | depends_on: 80 | - zookeeper 81 | image: quay.io/strimzi/kafka:0.30.0-kafka-3.1.0 82 | container_name: microcks-kafka 83 | command: [ 84 | "sh", "-c", 85 | "bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" 86 | ] 87 | ports: 88 | - "9092:9092" 89 | - "19092:19092" 90 | environment: 91 | LOG_DIR: "/tmp/logs" 92 | KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:19092,EXTERNAL://localhost:9092 93 | KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092 94 | KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT 95 | KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 96 | -------------------------------------------------------------------------------- /microcks/compose-devmode.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | mongo: 5 | image: mongo:4.4.6 6 | user: mongodb 7 | container_name: microcks-db 8 | ports: 9 | - 27017:27017 10 | 11 | postman: 12 | image: quay.io/microcks/microcks-postman-runtime:latest 13 | container_name: microcks-postman-runtime 14 | 15 | microcks: 16 | depends_on: 17 | - mongo 18 | - postman 19 | image: quay.io/microcks/microcks:1.8.0-fix-1 20 | container_name: microcks 21 | ports: 22 | - "8080:8080" 23 | - "9090:9090" 24 | environment: 25 | - SPRING_PROFILES_ACTIVE=prod 26 | - SPRING_DATA_MONGODB_URI=mongodb://mongo:27017 27 | - SPRING_DATA_MONGODB_DATABASE=microcks 28 | - POSTMAN_RUNNER_URL=http://postman:3000 29 | - TEST_CALLBACK_URL=http://microcks:8080 30 | - SERVICES_UPDATE_INTERVAL=0 0 0/2 * * * 31 | - KEYCLOAK_ENABLED=false 32 | #- MAX_UPLOAD_FILE_SIZE=3MB -------------------------------------------------------------------------------- /microcks/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | mongo: 5 | image: mongo:4.4.6 6 | user: mongodb 7 | container_name: microcks-db 8 | ports: 9 | - 27017:27017 10 | 11 | microcks-sso: 12 | image: jboss/keycloak:14.0.0 13 | container_name: microcks-sso 14 | ports: 15 | - "18080:8080" 16 | environment: 17 | DB_VENDOR: "h2" 18 | KEYCLOAK_USER: "admin" 19 | KEYCLOAK_PASSWORD: "admin" 20 | KEYCLOAK_IMPORT: "/tmp/microcks-realm.json" 21 | KEYCLOAK_FRONTEND_URL: "http://localhost:18080/auth" 22 | volumes: 23 | - "./microcks/keycloak-realm/microcks-realm-sample.json:/tmp/microcks-realm.json" 24 | 25 | postman: 26 | image: quay.io/microcks/microcks-postman-runtime:latest 27 | container_name: microcks-postman-runtime 28 | 29 | microcks: 30 | depends_on: 31 | - mongo 32 | - microcks-sso 33 | - postman 34 | image: quay.io/microcks/microcks:1.7.1 35 | container_name: microcks 36 | ports: 37 | - "8080:8080" 38 | - "9090:9090" 39 | environment: 40 | - SPRING_PROFILES_ACTIVE=prod 41 | - SPRING_DATA_MONGODB_URI=mongodb://mongo:27017 42 | - SPRING_DATA_MONGODB_DATABASE=microcks 43 | - POSTMAN_RUNNER_URL=http://postman:3000 44 | - TEST_CALLBACK_URL=http://microcks:8080 45 | - SERVICES_UPDATE_INTERVAL=0 0 0/2 * * * 46 | - KEYCLOAK_URL=http://microcks-sso:8080/auth 47 | - KEYCLOAK_PUBLIC_URL=http://localhost:18080/auth 48 | #- MAX_UPLOAD_FILE_SIZE=3MB -------------------------------------------------------------------------------- /microcks/config/application.properties: -------------------------------------------------------------------------------- 1 | # Async mocking support. 2 | async-api.enabled=true 3 | 4 | # Access to Microcks API server. 5 | %docker-compose.io.github.microcks.minion.async.client.MicrocksAPIConnector/mp-rest/url=http://microcks:8080 6 | 7 | # Access to Keycloak through docker network 8 | %docker-compose.keycloak.auth.url=http://microcks-sso:8080/auth 9 | 10 | # Access to Kafka broker. 11 | %docker-compose.kafka.bootstrap.servers=kafka:19092 12 | 13 | # Do not save any consumer-offset on the broker as there's a re-sync on each minion startup. 14 | %docker-compose.mp.messaging.incoming.microcks-services-updates.enable.auto.commit=false 15 | %docker-compose.mp.messaging.incoming.microcks-services-updates.bootstrap.servers=kafka:19092 16 | 17 | # Explicitly telling the minion the protocols we want to support 18 | %docker-compose.minion.supported-bindings=KAFKA,WS 19 | 20 | # %docker-compose.minion.supported-bindings=KAFKA,WS,MQTT,AMQP 21 | 22 | # %docker-compose.mqtt.server=localhost:1883 23 | # %docker-compose.mqtt.username=microcks 24 | # %docker-compose.mqtt.password=microcks 25 | 26 | # %docker-compose.amqp.server=localhost:5672 27 | # %docker-compose.amqp.username=microcks 28 | # %docker-compose.amqp.password=microcks -------------------------------------------------------------------------------- /microcks/config/features.properties: -------------------------------------------------------------------------------- 1 | features.feature.async-api.enabled=true 2 | features.feature.async-api.frequencies=3,10,30 3 | features.feature.async-api.default-binding=KAFKA 4 | features.feature.async-api.endpoint-KAFKA=kafka:19092 5 | features.feature.async-api.endpoint-MQTT=my-mqtt-broker.apps.try.microcks.io:1883 6 | features.feature.async-api.endpoint-AMQP=my-amqp-broker.apps.try.microcks.io:5672 7 | features.feature.async-api.endpoint-WS=localhost:8081 -------------------------------------------------------------------------------- /microcks/keycloak-realm/microcks-realm-sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "microcks", 3 | "realm": "microcks", 4 | "displayName": "Microcks", 5 | "enabled": true, 6 | "sslRequired": "none", 7 | "registrationAllowed": false, 8 | "users" : [ 9 | { 10 | "username" : "admin", 11 | "enabled": true, 12 | "credentials" : [ 13 | { "type" : "password", 14 | "value" : "admin" } 15 | ], 16 | "realmRoles": [], 17 | "applicationRoles": { 18 | "realm-management": [ "manage-users", "manage-clients" ], 19 | "account": [ "manage-account" ], 20 | "microcks-app": [ "user", "manager", "admin"] 21 | } 22 | } 23 | ], 24 | "roles": { 25 | "realm": [], 26 | "client": { 27 | "microcks-app": [ 28 | { 29 | "name": "user", 30 | "composite": false, 31 | "clientRole": true, 32 | "containerId": "microcks" 33 | }, 34 | { 35 | "name": "admin", 36 | "composite": false, 37 | "clientRole": true, 38 | "containerId": "microcks" 39 | }, 40 | { 41 | "name": "manager", 42 | "composite": false, 43 | "clientRole": true, 44 | "containerId": "microcks" 45 | } 46 | ] 47 | } 48 | }, 49 | "groups": [ 50 | { 51 | "name": "microcks", 52 | "path": "/microcks", 53 | "attributes": {}, 54 | "realmRoles": [], 55 | "clientRoles": {}, 56 | "subGroups": [ 57 | { 58 | "name": "manager", 59 | "path": "/microcks/manager", 60 | "attributes": {}, 61 | "realmRoles": [], 62 | "clientRoles": {}, 63 | "subGroups": [] 64 | } 65 | ] 66 | } 67 | ], 68 | "defaultRoles": [], 69 | "requiredCredentials": [ "password" ], 70 | "scopeMappings": [], 71 | "clientScopeMappings": { 72 | "microcks-app": [ 73 | { 74 | "client": "microcks-app-js", 75 | "roles": [ 76 | "manager", 77 | "admin", 78 | "user" 79 | ] 80 | } 81 | ], 82 | "realm-management": [ 83 | { 84 | "client": "microcks-app-js", 85 | "roles": [ 86 | "manage-users", 87 | "manage-clients" 88 | ] 89 | } 90 | ] 91 | }, 92 | "clients": [ 93 | { 94 | "clientId": "microcks-app-js", 95 | "enabled": true, 96 | "publicClient": true, 97 | "redirectUris": [ 98 | "http://localhost:8080/*" 99 | ], 100 | "webOrigins": [ 101 | "+" 102 | ], 103 | "fullScopeAllowed": false, 104 | "protocolMappers": [ 105 | { 106 | "name": "microcks-group-mapper", 107 | "protocol": "openid-connect", 108 | "protocolMapper": "oidc-group-membership-mapper", 109 | "consentRequired": false, 110 | "config": { 111 | "full.path": "true", 112 | "id.token.claim": "true", 113 | "access.token.claim": "true", 114 | "claim.name": "microcks-groups", 115 | "userinfo.token.claim": "true" 116 | } 117 | } 118 | ] 119 | } 120 | ], 121 | "applications": [ 122 | { 123 | "name": "microcks-app", 124 | "enabled": true, 125 | "bearerOnly": true, 126 | "defaultRoles": [ 127 | "user" 128 | ] 129 | }, 130 | { 131 | "name": "microcks-serviceaccount", 132 | "secret": "ab54d329-e435-41ae-a900-ec6b3fe15c54", 133 | "enabled": true, 134 | "bearerOnly": false, 135 | "publicClient": false, 136 | "standardFlowEnabled": false, 137 | "directAccessGrantsEnabled": true, 138 | "serviceAccountsEnabled": true, 139 | "clientAuthenticatorType": "client-secret" 140 | } 141 | ], 142 | "keycloakVersion": "10.0.1" 143 | } 144 | -------------------------------------------------------------------------------- /mongo/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | mongo: 6 | image: mongo:4.4.23 7 | user: mongodb 8 | container_name: mongo 9 | ports: 10 | - 27017:27017 11 | -------------------------------------------------------------------------------- /openldap/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | openldap: 6 | image: bitnami/openldap:2.6 7 | container_name: openldap 8 | environment: 9 | - LDAP_ADMIN_USERNAME=admin 10 | - LDAP_ADMIN_PASSWORD=adminpassword 11 | - LDAP_USERS=user01,user02 12 | - LDAP_PASSWORDS=password1,password2 13 | ports: 14 | - 1389:1389 15 | - 1636:1636 -------------------------------------------------------------------------------- /oracle-xe/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | oracle-xe: 6 | image: gvenzl/oracle-xe:21 7 | container_name: oracle-xe 8 | environment: 9 | - ORACLE_PASSWORD=welcome1 10 | - ORACLE_DATABASE=orcl 11 | ports: 12 | - 1521:1521 -------------------------------------------------------------------------------- /otel-collector/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | otel-collector: 6 | image: otel/opentelemetry-collector:0.120.0 7 | container_name: otel-collector 8 | command: [ "--config=/etc/otel-collector-config.yaml" ] 9 | volumes: 10 | - ./otel-collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml 11 | restart: always 12 | ports: 13 | - "1888:1888" # pprof extension 14 | - "8888:8888" # Prometheus metrics exposed by the collector 15 | - "8889:8889" # Prometheus exporter metrics 16 | - "13133:13133" # health_check extension 17 | - "4317:4317" # OTLP gRPC receiver 18 | - "4318:4318" # OTLP HTTP receiver 19 | - "55670:55679" # zpages extension 20 | -------------------------------------------------------------------------------- /otel-collector/otel-collector-config.yaml: -------------------------------------------------------------------------------- 1 | receivers: 2 | otlp: 3 | protocols: 4 | grpc: 5 | endpoint: 0.0.0.0:4317 6 | http: 7 | endpoint: 0.0.0.0:4318 8 | include_metadata: true 9 | cors: 10 | allowed_origins: 11 | - "*" 12 | 13 | exporters: 14 | prometheus: 15 | endpoint: "0.0.0.0:8889" 16 | # const_labels: 17 | # label1: value1 18 | 19 | otlp/jaeger: 20 | endpoint: jaeger:4317 21 | tls: 22 | insecure: true # Add this to disable TLS 23 | 24 | processors: 25 | batch: 26 | 27 | extensions: 28 | health_check: 29 | pprof: 30 | endpoint: :1888 31 | zpages: 32 | endpoint: :55679 33 | 34 | service: 35 | extensions: [pprof, zpages, health_check] 36 | pipelines: 37 | traces: 38 | receivers: [otlp] 39 | processors: [batch] 40 | exporters: [otlp/jaeger] 41 | metrics: 42 | # receivers: [otlp, prometheus] 43 | receivers: [otlp] 44 | processors: [batch] 45 | exporters: [prometheus] -------------------------------------------------------------------------------- /postgresql/README.md: -------------------------------------------------------------------------------- 1 | ## Details for connecting 2 | #### host machine 3 | Param | Value 4 | ------------ | ------------- 5 | jdbcUrl | jdbc:postgresql://localhost:5432/postgres 6 | user | postgres 7 | password | postgres 8 | #### other container 9 | Param | Value 10 | ------------ | ------------- 11 | jdbcUrl | jdbc:postgresql://postgres:5432/postgres 12 | user | postgres 13 | password | postgres -------------------------------------------------------------------------------- /postgresql/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | postgres: 6 | image: postgres:12-alpine 7 | container_name: postgres 8 | environment: 9 | - POSTGRES_USER=postgres 10 | - POSTGRES_PASSWORD=postgres 11 | - POSTGRES_DB=postgres 12 | ports: 13 | - 5432:5432 -------------------------------------------------------------------------------- /prometheus/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | prometheus: 6 | image: prom/prometheus:v2.37.7 7 | container_name: prometheus 8 | restart: unless-stopped 9 | volumes: 10 | - ./prometheus/prometheusConfig.yml:/etc/prometheus/prometheus.yml 11 | ports: 12 | - 9090:9090 -------------------------------------------------------------------------------- /prometheus/prometheusConfig.yml: -------------------------------------------------------------------------------- 1 | #Global configurations 2 | global: 3 | scrape_interval: 5s # Set the scrape interval to every 5 seconds. 4 | evaluation_interval: 5s # Evaluate rules every 5 seconds. 5 | scrape_configs: 6 | # - job_name: 'jaeger' 7 | # metrics_path: '/metrics' 8 | # static_configs: 9 | # - targets: ['jaeger:14269'] 10 | # - job_name: 'jaeger-ingester' 11 | # metrics_path: '/metrics' 12 | # static_configs: 13 | # - targets: ['jaeger-ingester:14270'] 14 | # - job_name: 'jaeger-query' 15 | # metrics_path: '/metrics' 16 | # static_configs: 17 | # - targets: ['jaeger-query:16687'] 18 | - job_name: 'otel-collector' 19 | scrape_interval: 10s 20 | static_configs: 21 | - targets: ['otel-collector:8889'] 22 | # - targets: ['otel-collector:8888'] 23 | # - job_name: 'BookingTripService' 24 | # metrics_path: '/actuator/prometheus' 25 | # static_configs: 26 | # - targets: ['tripbooking:8080'] 27 | # - job_name: 'BookingCarService' 28 | # metrics_path: '/actuator/prometheus' 29 | # static_configs: 30 | # - targets: ['carbooking:8080'] 31 | # - job_name: 'BookingHotelService' 32 | # metrics_path: '/actuator/prometheus' 33 | # static_configs: 34 | # - targets: ['hotelbooking:8080'] 35 | # - job_name: 'BookingFlightService' 36 | # metrics_path: '/actuator/prometheus' 37 | # static_configs: 38 | # - targets: ['flightbooking:8080'] -------------------------------------------------------------------------------- /rabbitmq/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Open web-browser 3 | http://localhost:15672 4 | guest/guest -------------------------------------------------------------------------------- /rabbitmq/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | rabbitmq: 6 | image: rabbitmq:3.12-management 7 | container_name: rabbitmq 8 | ports: 9 | - 5672:5672 10 | - 15672:15672 11 | -------------------------------------------------------------------------------- /redis/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | redis: 6 | image: redis:6 7 | container_name: redis 8 | ports: 9 | - 6379:6379 -------------------------------------------------------------------------------- /schema-registry/compose-cluster.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | schema-registry-1: 6 | image: confluentinc/cp-schema-registry:7.2.5 7 | container_name: schema-registry-1 8 | restart: always 9 | environment: 10 | - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092 11 | - SCHEMA_REGISTRY_HOST_NAME=schema-registry-1 12 | - SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 13 | - SCHEMA_REGISTRY_MASTER_ELIGIBILITY=true 14 | - SCHEMA_REGISTRY_KAFKASTORE_TOPIC=my-schemas 15 | ports: 16 | - 8081:8081 17 | schema-registry-2: 18 | image: confluentinc/cp-schema-registry:7.2.5 19 | container_name: schema-registry-2 20 | restart: always 21 | environment: 22 | - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092 23 | - SCHEMA_REGISTRY_HOST_NAME=schema-registry-2 24 | - SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 25 | - SCHEMA_REGISTRY_MASTER_ELIGIBILITY=true 26 | - SCHEMA_REGISTRY_KAFKASTORE_TOPIC=my-schemas 27 | ports: 28 | - 8082:8081 29 | schema-registry-3: 30 | image: confluentinc/cp-schema-registry:7.2.5 31 | container_name: schema-registry-3 32 | restart: always 33 | environment: 34 | - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092 35 | - SCHEMA_REGISTRY_HOST_NAME=schema-registry-3 36 | - SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 37 | - SCHEMA_REGISTRY_MASTER_ELIGIBILITY=true 38 | - SCHEMA_REGISTRY_KAFKASTORE_TOPIC=my-schemas 39 | ports: 40 | - 8083:8081 -------------------------------------------------------------------------------- /schema-registry/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | schema-registry: 6 | image: confluentinc/cp-schema-registry:7.2.5 7 | container_name: schema-registry 8 | environment: 9 | - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092 10 | - SCHEMA_REGISTRY_HOST_NAME=schema-registry 11 | - SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 12 | # - SCHEMA_REGISTRY_KAFKASTORE_TOPIC=my-schemas 13 | # - SCHEMA_REGISTRY_KAFKASTORE_GROUP_ID=test-group 14 | # - SCHEMA_REGISTRY_SCHEMA_REGISTRY_GROUP_ID=test-group 15 | # - SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL=SASL_PLAINTEXT \ 16 | # - SCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM=SCRAM-SHA-256 \ 17 | # - SCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG='org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass";' 18 | ports: 19 | - 8081:8081 -------------------------------------------------------------------------------- /sftp-server/.gitignore: -------------------------------------------------------------------------------- 1 | data 2 | -------------------------------------------------------------------------------- /sftp-server/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | sftp-server: 6 | image: atmoz/sftp 7 | container_name: sftp-server 8 | volumes: 9 | - ./sftp-server/data:/home/foo/upload/ 10 | ports: 11 | - "2222:22" 12 | command: foo:pass:1001 -------------------------------------------------------------------------------- /swagger-ui/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | swagger-ui: 6 | image: swaggerapi/swagger-ui:v4.19.1 7 | container_name: swagger-ui 8 | ports: 9 | - 8080:8080 -------------------------------------------------------------------------------- /traefik/README.md: -------------------------------------------------------------------------------- 1 | # Start 2 | `docker-compose up --scale whoami=3` 3 | 4 | # Test 5 | Send HTTP GET-requests: 6 | http://localhost:8080/auth/ 7 | 8 | Traefik dashboard: 9 | http://localhost:3000/dashboard#/ -------------------------------------------------------------------------------- /traefik/docker-demo.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | traefik: 6 | image: traefik:2.10 7 | container_name: traefik 8 | command: 9 | # - --log.level=INFO 10 | - --api.insecure=true 11 | - --providers.docker=true 12 | - --providers.docker.exposedbydefault=false 13 | - --entrypoints.web.address=:80 14 | ports: 15 | - 8080:80 16 | - 3000:8080 17 | volumes: 18 | - /var/run/docker.sock:/var/run/docker.sock:ro 19 | 20 | whoami: 21 | image: traefik/whoami 22 | labels: 23 | - traefik.enable=true 24 | - traefik.http.routers.whoami.rule=Host(`localhost`) # Specify your hostname instead of localhost if needed 25 | - traefik.http.routers.whoami.entrypoints=web 26 | -------------------------------------------------------------------------------- /weaviate/compose.yml: -------------------------------------------------------------------------------- 1 | # # version: '3.8' 2 | services: 3 | weaviate: 4 | command: 5 | - --host 6 | - 0.0.0.0 7 | - --port 8 | - '8080' 9 | - --scheme 10 | - http 11 | image: cr.weaviate.io/semitechnologies/weaviate:1.28.2 12 | ports: 13 | - 8080:8080 14 | - 50051:50051 15 | volumes: 16 | - weaviate_data:/var/lib/weaviate 17 | restart: on-failure:0 18 | environment: 19 | QUERY_DEFAULTS_LIMIT: 25 20 | CLUSTER_HOSTNAME: 'node1' 21 | AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' 22 | PERSISTENCE_DATA_PATH: '/var/lib/weaviate' 23 | # OpenAI modules 24 | DEFAULT_VECTORIZER_MODULE: 'text2vec-openai' 25 | ENABLE_MODULES: 'text2vec-openai,qna-openai' 26 | # Transformers module 27 | #ENABLE_MODULES: 'text2vec-transformers' 28 | #TRANSFORMERS_INFERENCE_API: 'http://t2v-transformers:8080' 29 | #DEFAULT_VECTORIZER_MODULE: 'text2vec-transformers' 30 | 31 | # t2v-transformers: 32 | # image: cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-multi-qa-MiniLM-L6-cos-v1 33 | # environment: 34 | # ENABLE_CUDA: '0' 35 | volumes: 36 | weaviate_data: -------------------------------------------------------------------------------- /wso2am/README.md: -------------------------------------------------------------------------------- 1 | ## Endpoints & details 2 | 3 | https://localhost:9443/carbon/ 4 | 5 | https://localhost:9443/devportal 6 | 7 | https://localhost:9443/publisher 8 | 9 | Username/password: admin/admin 10 | -------------------------------------------------------------------------------- /wso2am/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | wso2am: 6 | image: wso2/wso2am:4.0.0-alpine 7 | container_name: wso2am 8 | ports: 9 | - 8280:8280 10 | - 8243:8243 11 | - 9443:9443 -------------------------------------------------------------------------------- /zipkin/compose-es.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | zipkin: 6 | image: openzipkin/zipkin:2.24 7 | container_name: zipkin 8 | environment: 9 | - STORAGE_TYPE=elasticsearch 10 | - ES_HOSTS=http://elasticsearch:9200 11 | - ES_INDEX=test 12 | - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/discover?_a=(index:'filebeat-*',query:(language:lucene,query:'{traceId}')) 13 | ports: 14 | - 9411:9411 -------------------------------------------------------------------------------- /zipkin/compose.yml: -------------------------------------------------------------------------------- 1 | # version: '3.8' 2 | 3 | services: 4 | 5 | zipkin: 6 | image: openzipkin/zipkin:2.24 7 | container_name: zipkin 8 | environment: 9 | - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/discover?_a=(index:'filebeat-*',query:(language:lucene,query:'{traceId}')) 10 | ports: 11 | - 9411:9411 --------------------------------------------------------------------------------