diff --git a/6/6.1/base/Dockerfile b/6/6.1/base/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6e558a6a81cf3c3a94eace8b9d228d573c803a5a --- /dev/null +++ b/6/6.1/base/Dockerfile @@ -0,0 +1,90 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM openjdk:8-jre-alpine + +LABEL maintainer="hanahmily@apache.org" + +# Install required packages +RUN apk add --no-cache \ + bash \ + python \ + su-exec + + +ENV SKYWALKING_HOME=/skywalking +RUN mkdir -p "${SKYWALKING_HOME}" +WORKDIR $SKYWALKING_HOME + +ENV GPG_KEYS A968F6905E0ACB59E5B24C15D3D9CD50820184C2 B0801BC746F965029A1338072EF5026E70A55777 D360AB2AB20B28403270E2CBE8608938DB25E06B +ENV SKYWALKING_VERSION=6.1.0 +ENV SKYWALKING_SHA512 a19a24b790f41b1d7f93547104fbfc70a1dc208d855026b0c4696d1991518a952d031b62a76bfa923394042757dc92aa87e6cac6502d015f30258e9959e393bf + +ENV SKYWALKING_TGZ_URLS \ + https://www.apache.org/dyn/closer.cgi?action=download&filename=skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz \ + # if the version is outdated, we might have to pull from the dist/archive :/ + https://www-us.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz \ + https://www.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz \ + https://archive.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz + +ENV SKYWALKING_ASC_URLS \ + https://www.apache.org/dyn/closer.cgi?action=download&filename=skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz.asc \ + # if the version is outdated, we might have to pull from the dist/archive :/ + https://www-us.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz.asc \ + https://www.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz.asc \ + https://archive.apache.org/dist/skywalking/$SKYWALKING_VERSION/apache-skywalking-apm-$SKYWALKING_VERSION.tar.gz.asc + +RUN set -eux; \ + \ + apk add --no-cache --virtual .fetch-deps \ + gnupg \ + \ + ca-certificates \ + openssl \ + ; \ + \ + export GNUPGHOME="$(mktemp -d)"; \ + for key in $GPG_KEYS; do \ + gpg --batch --keyserver pgp.mit.edu --recv-keys "$key"; \ + done; \ + \ + success=; \ + for url in $SKYWALKING_TGZ_URLS; do \ + if wget -O skywalking.tar.gz "$url"; then \ + success=1; \ + break; \ + fi; \ + done; \ + [ -n "$success" ]; \ + \ + echo "$SKYWALKING_SHA512 *skywalking.tar.gz" | sha512sum -c -; \ + \ + success=; \ + for url in $SKYWALKING_ASC_URLS; do \ + if wget -O skywalking.tar.gz.asc "$url"; then \ + success=1; \ + break; \ + fi; \ + done; \ + [ -n "$success" ]; \ + \ + gpg --batch --verify skywalking.tar.gz.asc skywalking.tar.gz; \ + tar -xvf skywalking.tar.gz --strip-components=1; \ + rm -rf bin/; \ + rm skywalking.tar.gz*; \ + command -v gpgconf && gpgconf --kill all || :; \ + rm -rf "$GNUPGHOME"; \ + apk del .fetch-deps diff --git a/6/6.1/compose/docker-compose.yml b/6/6.1/compose/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..4c2634f44da3b11b6d7c68e11025414572b2391a --- /dev/null +++ b/6/6.1/compose/docker-compose.yml @@ -0,0 +1,57 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +version: '3.3' +services: + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:6.4.3 + container_name: elasticsearch + restart: always + ports: + - 9200:9200 + - 9300:9300 + environment: + discovery.type: single-node + ulimits: + memlock: + soft: -1 + hard: -1 + oap: + image: apache/skywalking-oap-server:6.1.0 + container_name: oap + depends_on: + - elasticsearch + links: + - elasticsearch + restart: always + ports: + - 11800:11800 + - 12800:12800 + environment: + SW_STORAGE: elasticsearch + SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200 + ui: + image: apache/skywalking-ui:6.1.0 + container_name: ui + depends_on: + - oap + links: + - oap + restart: always + ports: + - 8080:8080 + environment: + SW_OAP_ADDRESS: oap:12800 diff --git a/6/6.1/oap/Dockerfile b/6/6.1/oap/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..0ef7c18e881c91b16d75a06e4c853c85399e3256 --- /dev/null +++ b/6/6.1/oap/Dockerfile @@ -0,0 +1,42 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM apache/skywalking-base:6.1.0 + +LABEL maintainer="hanahmily@apache.org" + +ENV DIST_NAME=apache-skywalking-apm-bin \ + JAVA_OPTS=" -Xms256M " \ + SW_CLUSTER="standalone" \ + SW_STORAGE="h2" + +COPY "$DIST_NAME.tar.gz" / + +RUN set -ex; \ + tar -xzf "$DIST_NAME.tar.gz"; \ + rm -rf "$DIST_NAME.tar.gz"; \ + rm -rf "$DIST_NAME/config/log4j2.xml"; \ + rm -rf "$DIST_NAME/bin"; rm -rf "$DIST_NAME/webapp"; rm -rf "$DIST_NAME/agent"; \ + mv "$DIST_NAME" skywalking; + +WORKDIR skywalking + +COPY log4j2.xml config/ +COPY docker-entrypoint.sh . + +EXPOSE 12800 11800 1234 + +ENTRYPOINT ["bash", "docker-entrypoint.sh"] \ No newline at end of file diff --git a/6/6.1/oap/docker-entrypoint.sh b/6/6.1/oap/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..764cf01458016568ce9617c531c05e04932b0f4f --- /dev/null +++ b/6/6.1/oap/docker-entrypoint.sh @@ -0,0 +1,248 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash + +set -e + +var_application_file="config/application.yml" + +generateClusterStandalone() { + echo "cluster:" >> ${var_application_file} + echo " standalone:" >> ${var_application_file} +} + +generateClusterZookeeper() { + cat <> ${var_application_file} +cluster: + zookeeper: + nameSpace: \${SW_NAMESPACE:""} + hostPort: \${SW_CLUSTER_ZK_HOST_PORT:localhost:2181} + #Retry Policy + baseSleepTimeMs: \${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries + maxRetries: \${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry +EOT +} + +generateClusterK8s() { + cat <> ${var_application_file} +cluster: + kubernetes: + watchTimeoutSeconds: \${SW_CLUSTER_K8S_WATCH_TIMEOUT:60} + namespace: \${SW_CLUSTER_K8S_NAMESPACE:default} + labelSelector: \${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking} + uidEnvName: \${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID} +EOT +} + +generateClusterConsul() { + cat <> ${var_application_file} +cluster: + consul: + serviceName: \${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} + Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500 + hostPort: \${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500} +EOT +} + +generateStorageElastisearch() { + cat <> ${var_application_file} +storage: + elasticsearch: + nameSpace: \${SW_NAMESPACE:""} + clusterNodes: \${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} + user: \${SW_ES_USER:""} + password: \${SW_ES_PASSWORD:""} + indexShardsNumber: \${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2} + indexReplicasNumber: \${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} + # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html + bulkActions: \${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests + bulkSize: \${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb + flushInterval: \${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests + concurrentRequests: \${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests + metadataQueryMaxSize: \${SW_STORAGE_ES_QUERY_MAX_SIZE:5000} + segmentQueryMaxSize: \${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200} +EOT +} + +generateStorageH2() { + cat <> ${var_application_file} +storage: + h2: + driver: \${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource} + url: \${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db} + user: \${SW_STORAGE_H2_USER:sa} + metadataQueryMaxSize: \${SW_STORAGE_H2_QUERY_MAX_SIZE:5000} +EOT +} + +generateStorageMySQL() { + cat <> ${var_application_file} +storage: + mysql: + metadataQueryMaxSize: \${SW_STORAGE_H2_QUERY_MAX_SIZE:5000} +EOT +} + +validateVariables() { + name=$1; value=$2; list=$3 + valid=false + for c in ${list} ; do + if [[ "$c" = "$value" ]]; then + valid=true + fi + done + + if ! ${valid}; then + echo "Error: $name=$value please specify $name = $list" + exit 1 + fi +} + +generateApplicationYaml() { + # validate + [[ -z "$SW_CLUSTER" ]] && [[ -z "$SW_STORAGE" ]] && { echo "Error: please specify \"SW_CLUSTER\" \"SW_STORAGE\""; exit 1; } + + validateVariables "SW_CLUSTER" "$SW_CLUSTER" "standalone zookeeper kubernetes consul" + + validateVariables "SW_STORAGE" "$SW_STORAGE" "elasticsearch h2 mysql" + + echo "# Generated by 'docker-entrypoint.sh'" > ${var_application_file} + #generate cluster + case ${SW_CLUSTER} in + standalone) generateClusterStandalone;; + zookeeper) generateClusterZookeeper;; + kubernetes) generateClusterK8s;; + consul) generateClusterConsul;; + esac + + #generate core + cat <> ${var_application_file} +core: + default: + # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate + # Receiver: Receive agent data, Level 1 aggregate + # Aggregator: Level 2 aggregate + role: \${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator + restHost: \${SW_CORE_REST_HOST:0.0.0.0} + restPort: \${SW_CORE_REST_PORT:12800} + restContextPath: \${SW_CORE_REST_CONTEXT_PATH:/} + gRPCHost: \${SW_CORE_GRPC_HOST:0.0.0.0} + gRPCPort: \${SW_CORE_GRPC_PORT:11800} + downsampling: + - Hour + - Day + - Month + # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted. + recordDataTTL: \${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute + minuteMetricsDataTTL: \${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute + hourMetricsDataTTL: \${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour + dayMetricsDataTTL: \${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day + monthMetricsDataTTL: \${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month +EOT + + # generate storage + case ${SW_STORAGE} in + elasticsearch) generateStorageElastisearch;; + h2) generateStorageH2;; + mysql) generateStorageMySQL;; + esac + + cat <> ${var_application_file} +receiver-sharing-server: + default: +receiver-register: + default: +receiver-trace: + default: + bufferPath: \${SW_RECEIVER_BUFFER_PATH:../trace-buffer/} # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: \${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB + bufferDataMaxFileSize: \${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB + bufferFileCleanWhenRestart: \${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false} + sampleRate: \${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default. + slowDBAccessThreshold: \${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms. +receiver-jvm: + default: +receiver-clr: + default: +service-mesh: + default: + bufferPath: \${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/} # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: \${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE:100} # Unit is MB + bufferDataMaxFileSize: \${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB + bufferFileCleanWhenRestart: \${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART:false} +istio-telemetry: + default: +envoy-metric: + default: +query: + graphql: + path: \${SW_QUERY_GRAPHQL_PATH:/graphql} +alarm: + default: +telemetry: + prometheus: + host: \${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0} + port: \${SW_TELEMETRY_PROMETHEUS_PORT:1234} +EOT + + if [[ "$SW_RECEIVER_ZIPKIN_ENABLED" = "true" ]]; then + cat <> ${var_application_file} +receiver_zipkin: + default: + host: \${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0} + port: \${SW_RECEIVER_ZIPKIN_PORT:9411} + contextPath: \${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/} +EOT + fi + + if [[ "$SW_RECEIVER_JAEGER_ENABLED" = "true" ]]; then + cat <> ${var_application_file} +receiver_jaeger: + default: + gRPCHost: \${SW_RECEIVER_JAEGER_HOST:0.0.0.0} + gRPCPort: \${SW_RECEIVER_JAEGER_PORT:14250} +EOT + fi + + if [[ "$SW_EXPORTER_ENABLED" = "true" ]]; then + cat <> \${var_application_file} +exporter: + grpc: + targetHost: \${SW_EXPORTER_GRPC_HOST:127.0.0.1} + targetPort: \${SW_EXPORTER_GRPC_PORT:9870} +EOT + fi +} + +echo "[Entrypoint] Apache SkyWalking Docker Image" + +if [[ -z "$SW_L0AD_CONFIG_FILE_FROM_VOLUME" ]] || [[ "$SW_L0AD_CONFIG_FILE_FROM_VOLUME" != "true" ]]; then + generateApplicationYaml + echo "Generated application.yml" + echo "-------------------------" + cat ${var_application_file} + echo "-------------------------" +fi + +CLASSPATH="config:$CLASSPATH" +for i in oap-libs/*.jar +do + CLASSPATH="$i:$CLASSPATH" +done + +exec java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap \ + ${JAVA_OPTS} -classpath ${CLASSPATH} org.apache.skywalking.oap.server.starter.OAPServerStartUp "$@" diff --git a/6/6.1/oap/log4j2.xml b/6/6.1/oap/log4j2.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1f18186374f061543a56f6ef2fbf60af9a0fc90 --- /dev/null +++ b/6/6.1/oap/log4j2.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/6/6.1/ui/Dockerfile b/6/6.1/ui/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..546de275646bba4323e47b6cf2595a48da8163be --- /dev/null +++ b/6/6.1/ui/Dockerfile @@ -0,0 +1,42 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM apache/skywalking-base:6.0.0-GA + +LABEL maintainer="hanahmily@apache.org" + +ENV DIST_NAME=apache-skywalking-apm-bin \ + JAVA_OPTS=" -Xms256M " \ + SW_OAP_ADDRESS="127.0.0.1:12800" \ + SW_TIMEOUT="20000" + +COPY "$DIST_NAME.tar.gz" / + +RUN set -ex; \ + tar -xzf "$DIST_NAME.tar.gz"; \ + rm -rf "$DIST_NAME.tar.gz"; \ + rm -rf "$DIST_NAME/config"; \ + rm -rf "$DIST_NAME/bin"; rm -rf "$DIST_NAME/oap-libs"; rm -rf "$DIST_NAME/agent"; \ + mv "$DIST_NAME" skywalking; + +WORKDIR skywalking + +COPY docker-entrypoint.sh . +COPY logback.xml webapp/ + +EXPOSE 8080 + +ENTRYPOINT ["bash", "docker-entrypoint.sh"] \ No newline at end of file diff --git a/6/6.1/ui/docker-entrypoint.sh b/6/6.1/ui/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..6771e22f2c1fce642f540a5161f27e7bfb58f201 --- /dev/null +++ b/6/6.1/ui/docker-entrypoint.sh @@ -0,0 +1,26 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash + +set -e + +export LOGGING_CONFIG="webapp/logback.xml" + +[[ ! -z "$SW_OAP_ADDRESS" ]] && export COLLECTOR_RIBBON_LISTOFSERVERS=${SW_OAP_ADDRESS} && echo "COLLECTOR_RIBBON_LISTOFSERVERS=$COLLECTOR_RIBBON_LISTOFSERVERS" +[[ ! -z "$SW_TIMEOUT" ]] && export COLLECTOR_RIBBON_READTIMEOUT=${SW_TIMEOUT} && echo "COLLECTOR_RIBBON_READTIMEOUT=$COLLECTOR_RIBBON_READTIMEOUT" + +exec java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar webapp/skywalking-webapp.jar "$@" diff --git a/6/6.1/ui/logback.xml b/6/6.1/ui/logback.xml new file mode 100644 index 0000000000000000000000000000000000000000..834036d7bf278b7c8b6015afa6bd02acc2d04d33 --- /dev/null +++ b/6/6.1/ui/logback.xml @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file