diff --git a/docker-compose.yml b/docker-compose.yml index fb5a7156c..aae455935 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,87 +1,40 @@ -version: '2' +version: '2.1' services: - - skywalking-storage: - image: skywalking/skywalking-storage:2.1-2017 - expose: - - "34000" - depends_on: - - registry-center-server - links: - - registry-center-server - environment: - - REGISTRY_CENTER_URL=registry-center-server:2181 - - skywalking-alarm: - image: skywalking/skywalking-alarm:2.1-2017 - depends_on: - - alarm-coordinate-zk - - mysql-server - - redis-server - links: - - alarm-coordinate-zk - - mysql-server - - redis-server - environment: - - ALARM_COORDINATE_ZK_ADDRESS=alarm-coordinate-zk:2181 - - MYSQL_SERVER=mysql-server:3306 - - REDIS_SERVER=redis-server:6379 - - WEBUI_DEPLOY_ADDRESS=192.168.1.104:8080 - - WEBUI_APPLICATION_CONTEXT=skywalking - - ALARM_MAIL_HOST=smtp.mail.com - - MAIL_USER_NAME=skywalking - - MAIL_PASSWORD=skywalking - - MAIL_SENDER_MAIL=skywalking@mail.com - - skywalking-routing: - image: skywalking/skywalking-routing:2.1-2017 - expose: - - "23000" - ports: - - "23000:23000" - depends_on: - - registry-center-server - links: - - registry-center-server - environment: - - REGISTRY_CENTER_URL=registry-center-server:2181 - - ALARM_REDIS_SERVER=redis-server:6379 - skywalking-webui: - image: skywalking/skywalking-webui:2.1-2017 + image: sky-walking-ui:1.0 expose: - "8080" ports: - "8080:8080" - depends_on: - - mysql-server - - registry-center-server links: - - mysql-server - - registry-center-server + - skywalking-collector environment: - - MYSQL_URL=mysql-server:3306 - - REGISTRY_CENTER_URL=registry-center-server:2181 + - COLLECTOR_SERVERS=skywalking-collector:7001 - mysql-server: - image: mysql:5.6 + skywalking-collector: + image: skywalking-collector:3.0-2017 expose: - - "3306" + - "7001" + - "1000" + ports: + - "7001:7001" + depends_on: + es-server: + condition: service_healthy + links: + - es-server environment: - MYSQL_DATABASE: test - MYSQL_ROOT_PASSWORD: root + - ES_CLUSTER_NODES=es-server:9300 + - HTTP_HOST_NAME=0.0.0.0 - registry-center-server: - image: zookeeper:3.4.9 + es-server: + image: elasticsearch:5.3 + command: "-Enode.name=TestNode -Enetwork.host=0.0.0.0 -Ehttp.cors.enabled=true -Ehttp.cors.allow-origin=* -Ethread_pool.bulk.queue_size=1000 -Ecluster.name=CollectorDBCluster" expose: - - "2181" - - redis-server: - image: redis:3.2.6 - expose: - - "6379" - - alarm-coordinate-zk: - image: zookeeper:3.4.9 - expose: - - "2181" \ No newline at end of file + - "9200" + - "9300" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9200"] + interval: 30s + timeout: 10s + retries: 5 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2445e2397..d957e316b 100644 --- a/pom.xml +++ b/pom.xml @@ -182,6 +182,14 @@ + + com.spotify + docker-maven-plugin + ${docker.plugin.version} + + true + + diff --git a/skywalking-collector/skywalking-collector-worker/bin/collector-service.bat b/skywalking-collector/skywalking-collector-worker/bin/collector-service.bat new file mode 100644 index 000000000..1325f563b --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/bin/collector-service.bat @@ -0,0 +1,20 @@ +@echo off + +setlocal +set COLLECOTR_PROCESS_TITLE=Skywalking-Collector +set COLLECTOR_BASE_PATH=%~dp0%.. +set COLLECTOR_RUNTIME_OPTIONS="-Xms256M -Xmx512M" + +set CLASSPATH=%COLLECTOR_BASE_PATH%\config; +SET CLASSPATH=%COLLECTOR_BASE_PATH%\libs\*;%CLASSPATH% + +if ""%JAVA_HOME%"" == """" ( + set _EXECJAVA=java +) else ( + set _EXECJAVA="%JAVA_HOME%"/bin/java +) + +start /MIN "%COLLECOTR_PROCESS_TITLE%" %_EXECJAVA% "%COLLECTOR_RUNTIME_OPTIONS%" -cp "%CLASSPATH%" com.a.eye.skywalking.collector.worker.CollectorBootStartUp & +echo Collector started successfully! + +endlocal diff --git a/skywalking-collector/skywalking-collector-worker/bin/collector-service.sh b/skywalking-collector/skywalking-collector-worker/bin/collector-service.sh new file mode 100644 index 000000000..5f5d5a9e7 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/bin/collector-service.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +PRG="$0" +PRGDIR=`dirname "$PRG"` +[ -z "$COLLECTOR_HOME" ] && COLLECTOR_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` + +COLLECTOR_LOGS_DIR="${COLLECTOR_HOME}/logs" +JAVA_OPTS=" -Xms256M -Xmx512M" + +if [ ! -d "${COLLECTOR_HOME}/logs" ]; then + mkdir -p "${COLLECTOR_LOGS_DIR}" +fi + +_RUNJAVA=${JAVA_HOME}/bin/java +[ -z "$JAVA_HOME" ] && _RUNJAVA=`java` + +CLASSPATH="$COLLECTOR_HOME/config:$CLASSPATH" +for i in "$COLLECTOR_HOME"/libs/*.jar +do + CLASSPATH="$i:$CLASSPATH" +done + +echo "Starting collector...." +eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -classpath $CLASSPATH com.a.eye.skywalking.collector.worker.CollectorBootStartUp \ + 2>${COLLECTOR_LOGS_DIR}/collector.log 1> /dev/null &" + +if [ $? -eq 0 ]; then + sleep 1 + echo "Collector started successfully!" +else + echo "Collector started failure!" + exit 1 +fi diff --git a/skywalking-collector/skywalking-collector-worker/bin/startup.bat b/skywalking-collector/skywalking-collector-worker/bin/startup.bat new file mode 100644 index 000000000..d2e3f015f --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/bin/startup.bat @@ -0,0 +1,5 @@ +@echo off + +setlocal +call "%~dp0"\collector-service.bat start +endlocal diff --git a/skywalking-collector/skywalking-collector-worker/bin/startup.sh b/skywalking-collector/skywalking-collector-worker/bin/startup.sh new file mode 100644 index 000000000..a5486fb57 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/bin/startup.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +PRG="$0" +PRGDIR=`dirname "$PRG"` +EXECUTABLE=collector-service.sh + +exec "$PRGDIR"/"$EXECUTABLE" start diff --git a/skywalking-collector/skywalking-collector-worker/docker/Dockerfile b/skywalking-collector/skywalking-collector-worker/docker/Dockerfile new file mode 100644 index 000000000..b6025fd48 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/docker/Dockerfile @@ -0,0 +1,22 @@ +FROM openjdk:8-jdk + +ENV CLUSTER_CURRENT_HOST_NAME=127.0.0.1 \ + CLUSTER_CURRENT_PORT=1000 \ + CLUSTER_CURRENT_ROLES=WorkersListener \ + CLUSTER_SEED_NODES=127.0.0.1:1000,127.0.0.1:1001 \ + ES_CLUSTER_NAME=CollectorDBCluster \ + ES_CLUSTER_NODES=127.0.0.1:9300 \ + ES_INDEX_SHARDS_NUMBER=2 \ + ES_INDEX_REPLICAS_NUMBER=0 \ + HTTP_HOST_NAME=127.0.0.1 \ + HTTP_PORT=7001 \ + HTTP_CONTEXT_PATH=/ + +ADD skywalking-collector.tar.gz /usr/local +COPY startup.sh /usr/local/skywalking-collector/bin +COPY collector.config /usr/local/skywalking-collector/config +ADD docker-entrypoint.sh / +RUN chmod +x /docker-entrypoint.sh && chmod +x /usr/local/skywalking-collector/bin/startup.sh + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["/usr/local/skywalking-collector/bin/startup.sh"] diff --git a/skywalking-collector/skywalking-collector-worker/docker/collector.config b/skywalking-collector/skywalking-collector-worker/docker/collector.config new file mode 100644 index 000000000..9a74bb4f2 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/docker/collector.config @@ -0,0 +1,63 @@ +cluster.current.hostname={CLUSTER_CURRENT_HOST_NAME} +cluster.current.port={CLUSTER_CURRENT_PORT} +cluster.current.roles={CLUSTER_CURRENT_ROLES} +cluster.seed_nodes={CLUSTER_SEED_NODES} + +es.cluster.name={ES_CLUSTER_NAME} +es.cluster.nodes={ES_CLUSTER_NODES} +es.cluster.transport.sniffer=true + +es.index.shards.number={ES_INDEX_SHARDS_NUMBER} +es.index.replicas.number={ES_INDEX_REPLICAS_NUMBER} + +http.hostname={HTTP_HOST_NAME} +http.port={HTTP_PORT} +http.contextPath={HTTP_CONTEXT_PATH} + +cache.analysis.size=1024 +cache.persistence.size=1024 + +WorkerNum.Node.NodeCompAgg.Value=10 +WorkerNum.Node.NodeMappingDayAgg.Value=10 +WorkerNum.Node.NodeMappingHourAgg.Value=10 +WorkerNum.Node.NodeMappingMinuteAgg.Value=10 + +WorkerNum.NodeRef.NodeRefDayAgg.Value=10 +WorkerNum.NodeRef.NodeRefHourAgg.Value=10 +WorkerNum.NodeRef.NodeRefMinuteAgg.Value=10 +WorkerNum.NodeRef.NodeRefResSumDayAgg.Value=10 +WorkerNum.NodeRef.NodeRefResSumHourAgg.Value=10 +WorkerNum.NodeRef.NodeRefResSumMinuteAgg.Value=10 + +WorkerNum.GlobalTrace.GlobalTraceAgg.Value=10 + +Queue.GlobalTrace.GlobalTraceSave.Size=1024 +Queue.GlobalTrace.GlobalTraceAnalysis.Size=1024 + +Queue.Segment.SegmentPost.Size=1024 +Queue.Segment.SegmentCostSave.Size=1024 +Queue.Segment.SegmentSave.Size=1024 +Queue.Segment.SegmentExceptionSave.Size=1024 + +Queue.Node.NodeCompAnalysis.Size=1024 +Queue.Node.NodeMappingDayAnalysis.Size=1024 +Queue.Node.NodeMappingHourAnalysis.Size=1024 +Queue.Node.NodeMappingMinuteAnalysis.Size=1024 +Queue.Node.NodeCompSave.Size=1024 +Queue.Node.NodeMappingDaySave.Size=1024 +Queue.Node.NodeMappingHourSave.Size=1024 +Queue.Node.NodeMappingMinuteSave.Size=1024 + +Queue.NodeRef.NodeRefDayAnalysis.Size=1024 +Queue.NodeRef.NodeRefHourAnalysis.Size=1024 +Queue.NodeRef.NodeRefMinuteAnalysis.Size=1024 +Queue.NodeRef.NodeRefDaySave.Size=1024 +Queue.NodeRef.NodeRefHourSave.Size=1024 +Queue.NodeRef.NodeRefMinuteSave.Size=1024 +Queue.NodeRef.NodeRefResSumDaySave.Size=1024 +Queue.NodeRef.NodeRefResSumHourSave.Size=1024 +Queue.NodeRef.NodeRefResSumMinuteSave.Size=1024 +Queue.NodeRef.NodeRefResSumDayAnalysis.Size=1024 +Queue.NodeRef.NodeRefResSumHourAnalysis.Size=1024 +Queue.NodeRef.NodeRefResSumMinuteAnalysis.Size=1024 + diff --git a/skywalking-collector/skywalking-collector-worker/docker/docker-entrypoint.sh b/skywalking-collector/skywalking-collector-worker/docker/docker-entrypoint.sh new file mode 100644 index 000000000..4d7fe1d42 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/docker/docker-entrypoint.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +echo "replace CLUSTER_CURRENT_HOST_NAME with $CLUSTER_CURRENT_HOST_NAME" +eval sed -i -e 's/\{CLUSTER_CURRENT_HOST_NAME\}/$CLUSTER_CURRENT_HOST_NAME/' /usr/local/skywalking-collector/config/collector.config + +echo "replace CLUSTER_CURRENT_PORT with $CLUSTER_CURRENT_PORT" +eval sed -i -e 's/\{CLUSTER_CURRENT_PORT\}/$CLUSTER_CURRENT_PORT/' /usr/local/skywalking-collector/config/collector.config + +echo "replace CLUSTER_CURRENT_ROLES with $CLUSTER_CURRENT_ROLES" +eval sed -i -e 's/\{CLUSTER_CURRENT_ROLES\}/$CLUSTER_CURRENT_ROLES/' /usr/local/skywalking-collector/config/collector.config + +echo "replace CLUSTER_SEED_NODES with $CLUSTER_SEED_NODES" +eval sed -i -e 's/\{CLUSTER_SEED_NODES\}/$CLUSTER_SEED_NODES/' /usr/local/skywalking-collector/config/collector.config + +echo "replace ES_CLUSTER_NAME with $ES_CLUSTER_NAME" +eval sed -i -e 's/\{ES_CLUSTER_NAME\}/$ES_CLUSTER_NAME/' /usr/local/skywalking-collector/config/collector.config + + +echo "replcae ES_CLUSTER_NODES with $ES_CLUSTER_NODES" +eval sed -i -e 's/\{ES_CLUSTER_NODES\}/$ES_CLUSTER_NODES/' /usr/local/skywalking-collector/config/collector.config + +echo "replace ES_INDEX_SHARDS_NUMBER with $ES_INDEX_SHARDS_NUMBER" +eval sed -i -e 's/\{ES_INDEX_SHARDS_NUMBER\}/$ES_INDEX_SHARDS_NUMBER/' /usr/local/skywalking-collector/config/collector.config + +echo "replace ES_INDEX_REPLICAS_NUMBER with $ES_INDEX_REPLICAS_NUMBER" +eval sed -i -e 's/\{ES_INDEX_REPLICAS_NUMBER\}/$ES_INDEX_REPLICAS_NUMBER/' /usr/local/skywalking-collector/config/collector.config + +echo "replace HTTP_HOST_NAME with $HTTP_HOST_NAME" +eval sed -i -e 's/\{HTTP_HOST_NAME\}/$HTTP_HOST_NAME/' /usr/local/skywalking-collector/config/collector.config + +echo "replace HTTP_PORT with $HTTP_PORT" +eval sed -i -e 's/\{HTTP_PORT\}/$HTTP_PORT/' /usr/local/skywalking-collector/config/collector.config + +echo "replace HTTP_CONTEXT_PATH with $HTTP_CONTEXT_PATH" +eval sed -i -e 's/\{HTTP_CONTEXT_PATH\}/$HTTP_CONTEXT_PATH/' /usr/local/skywalking-collector/config/collector.config + +exec "$@" \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/docker/startup.sh b/skywalking-collector/skywalking-collector-worker/docker/startup.sh new file mode 100644 index 000000000..c8576d982 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/docker/startup.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PRG="$0" +PRGDIR=`dirname "$PRG"` +[ -z "$COLLECTOR_HOME" ] && COLLECTOR_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` + +COLLECTOR_LOGS_DIR="${COLLECTOR_HOME}/logs" +JAVA_OPTS=" -Xms256M -Xmx512M" + +if [ ! -d "${COLLECTOR_HOME}/logs" ]; then + mkdir -p "${COLLECTOR_LOGS_DIR}" +fi + +_RUNJAVA=${JAVA_HOME}/bin/java +[ -z "$JAVA_HOME" ] && _RUNJAVA=`java` + +CLASSPATH="$COLLECTOR_HOME/config:$CLASSPATH" +for i in "$COLLECTOR_HOME"/libs/*.jar +do + CLASSPATH="$i:$CLASSPATH" +done + +echo "Starting collector...." +$_RUNJAVA ${JAVA_OPTS} -classpath $CLASSPATH com.a.eye.skywalking.collector.worker.CollectorBootStartUp \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/pom.xml b/skywalking-collector/skywalking-collector-worker/pom.xml index b39688634..fe61d9bdf 100644 --- a/skywalking-collector/skywalking-collector-worker/pom.xml +++ b/skywalking-collector/skywalking-collector-worker/pom.xml @@ -14,6 +14,9 @@ 9.4.2.v20170220 + com.a.eye.skywalking.collector.worker.CollectorBootStartUp + skywalking-collector + ${version} @@ -54,4 +57,64 @@ RELEASE + + + skywalking-collector + + + org.apache.maven.plugins + maven-jar-plugin + 2.3.2 + + + *.xml + *.config + + + + ${main.class} + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + assembly + package + + single + + + + src/main/assembly/assembly.xml + + + + + + + com.spotify + docker-maven-plugin + ${docker.plugin.version} + + false + ${docker.cache.imageName} + + ${docker.imageTag.version} + + ${project.basedir}/docker + + + / + ${project.build.directory} + ${build.finalName}.tar.gz + + + + + + diff --git a/skywalking-collector/skywalking-collector-worker/src/main/assembly/assembly.xml b/skywalking-collector/skywalking-collector-worker/src/main/assembly/assembly.xml new file mode 100644 index 000000000..7dc44e3dd --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/assembly/assembly.xml @@ -0,0 +1,42 @@ + + + + tar.gz + zip + + + + /libs + runtime + + + + + ${project.basedir}/bin + /bin + + *.sh + *.bat + + 0755 + + + src/main/resources + + collector.config + log4j2.xml + + /config + + + ${project.build.directory} + /libs + + ${build.finalName}.jar + + + + \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config b/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config index a0dc24b94..0c35dd850 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config @@ -1,52 +1,20 @@ -# The remote server should connect to, hostname can be either hostname or IP address. -# Suggestion: set the real ip address. cluster.current.hostname=127.0.0.1 -cluster.current.port=1000 - -# The roles of this member. List of strings, e.g. roles = A, B -# In the future, the roles are part of the membership information and can be used by -# routers or other services to distribute work to certain member types, -# e.g. front-end and back-end nodes. -# In this version, all members has same roles, each of them will listen others status, -# because of network trouble or member jvm crash or every reason led to not reachable, -# the routers will stop to sending the message to the untouchable member. +cluster.current.port=11800 cluster.current.roles=WorkersListener +cluster.seed_nodes=127.0.0.1:11800 -# Initial contact points of the cluster, e.g. seed_nodes = 127.0.0.1:1000, 127.0.0.1:1001. -# The nodes to join automatically at startup. -# When setting akka configuration, it will be change. -# like: ["akka.tcp://system@127.0.0.1:1000", "akka.tcp://system@127.0.0.1:1001"]. -# This is akka configuration, see: http://doc.akka.io/docs/akka/2.4/general/configuration.html -cluster.seed_nodes=127.0.0.1:1000,127.0.0.1:1001 - -# elasticsearch configuration, config/elasticsearch.yml, see cluster.name es.cluster.name=CollectorDBCluster +es.cluster.nodes=127.0.0.1:9300 es.cluster.transport.sniffer=true -# The elasticsearch nodes of cluster, comma separated, e.g. nodes=ip:port, ip:port -es.cluster.nodes=127.0.0.1:9300 - -# Automatic create elasticsearch index -# Options: overwrite, ignore, off -# Overwrite: delete the index then create -# Ignore: just create new index when index not created. -es.index.create=ignore es.index.shards.number=2 es.index.replicas.number=0 -# You can configure a host either as a host name or IP address to identify a specific network -# interface on which to listen. -# Be used for web ui get the view data or agent post the trace segment. http.hostname=127.0.0.1 -# The TCP/IP port on which the connector listens for connections. -http.port=7001 -# The contextPath is a URL prefix that identifies which context a HTTP request is destined for. +http.port=12800 http.contextPath=/ -# The analysis worker max cache size, when worker data size reach the size, -# then worker will send all cached data to the next worker and clear the cache. cache.analysis.size=1024 -# The persistence worker max cache size, same of "cache.analysis.size" ability. cache.persistence.size=1024 WorkerNum.Node.NodeCompAgg.Value=10 diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml b/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml index a97644db3..e7ad5ffe0 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml @@ -1,19 +1,26 @@ - + + + ../logs + - - - + + + %d - %c -%-4r [%t] %-5p %x - %m%n + + + + + + - - - - - - - - + + + + + - + \ No newline at end of file