diff --git a/docker/Makefile b/docker/Makefile index 30f159ce03..0d168156d5 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -14,9 +14,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -snapshot: - cd snapshot; \ +oap: + cd oap; \ cp ../../dist/apache-skywalking-apm-incubating.tar.gz ./ ; \ docker build -t skywalking/oap:latest . -.PHONY: snapshot \ No newline at end of file +ui: + cd ui; \ + cp ../../dist/apache-skywalking-apm-incubating.tar.gz ./ ; \ + docker build -t skywalking/ui:latest . + +build: oap ui + +.PHONY: oap ui \ No newline at end of file diff --git a/docker/README.md b/docker/README.md index 76cfa95892..15d4a2c75b 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,12 +1,12 @@ -# Build snapshot image +# Build all images ```shell -make snapshot +make build ``` -# Run oap by docker-compose +# Run skywalking by docker-compose ```shell -docker-compose -f stack.yml up +docker-compose up ``` \ No newline at end of file diff --git a/docker/config/application.yml b/docker/config/application.yml new file mode 100644 index 0000000000..367b978558 --- /dev/null +++ b/docker/config/application.yml @@ -0,0 +1,82 @@ +# 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. + +cluster: + standalone: +# zookeeper: +# hostPort: localhost:2181 +# # Retry Policy +# baseSleepTimeMs: 1000 # initial amount of time to wait between retries +# maxRetries: 3 # max number of times to retry +# kubernetes: +# watchTimeoutSeconds: 60 +# namespace: default +# labelSelector: app=collector,release=skywalking +# uidEnvName: SKYWALKING_COLLECTOR_UID +core: + default: + restHost: 0.0.0.0 + restPort: 12800 + restContextPath: / + gRPCHost: 0.0.0.0 + gRPCPort: 11800 + downsampling: + - Hour + - Day + - Month + # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted. + recordDataTTL: 90 # Unit is minute + minuteMetricsDataTTL: 90 # Unit is minute + hourMetricsDataTTL: 36 # Unit is hour + dayMetricsDataTTL: 45 # Unit is day + monthMetricsDataTTL: 18 # Unit is month +storage: + elasticsearch: + clusterNodes: elasticsearch:9200 + indexShardsNumber: 2 + indexReplicasNumber: 0 + # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html + bulkActions: 2000 # Execute the bulk every 2000 requests + bulkSize: 20 # flush the bulk every 20mb + flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests + concurrentRequests: 2 # the number of concurrent requests +# h2: +# driver: org.h2.jdbcx.JdbcDataSource +# url: jdbc:h2:mem:skywalking-oap-db +# user: sa +receiver-register: + default: +receiver-trace: + default: + bufferPath: ../trace-buffer/ # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: 100 # Unit is MB + bufferDataMaxFileSize: 500 # Unit is MB + bufferFileCleanWhenRestart: false +receiver-jvm: + default: +service-mesh: + default: + bufferPath: ../mesh-buffer/ # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: 100 # Unit is MB + bufferDataMaxFileSize: 500 # Unit is MB + bufferFileCleanWhenRestart: false +istio-telemetry: + default: +query: + graphql: + path: /graphql +alarm: + default: diff --git a/docker/snapshot/log4j2.xml b/docker/config/log4j2.xml similarity index 100% rename from docker/snapshot/log4j2.xml rename to docker/config/log4j2.xml diff --git a/docker/stack.yml b/docker/docker-compose.yml similarity index 79% rename from docker/stack.yml rename to docker/docker-compose.yml index 63c25f7c34..927cd4c26e 100644 --- a/docker/stack.yml +++ b/docker/docker-compose.yml @@ -35,4 +35,18 @@ services: restart: always ports: - 11800:11800 - - 12800:12800 \ No newline at end of file + - 12800:12800 + volumes: + - ./config:/apache-skywalking-apm-incubating/config:ro + ui: + image: skywalking/ui + container_name: ui + depends_on: + - oap + links: + - oap + restart: always + ports: + - 8080:8080 + environment: + collector.ribbon.listOfServers: oap:12800 \ No newline at end of file diff --git a/docker/snapshot/Dockerfile b/docker/oap/Dockerfile similarity index 85% rename from docker/snapshot/Dockerfile rename to docker/oap/Dockerfile index 59cbe6d736..10d48592e9 100644 --- a/docker/snapshot/Dockerfile +++ b/docker/oap/Dockerfile @@ -27,7 +27,8 @@ COPY "$DIST_NAME.tar.gz" / RUN set -ex; \ tar -xzf "$DIST_NAME.tar.gz"; \ - rm -rf "$DIST_NAME.tar.gz"; rm -rf config/log4j2.xml; + 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"; WORKDIR $DIST_NAME @@ -36,4 +37,4 @@ COPY docker-entrypoint.sh . EXPOSE 12800 11800 -ENTRYPOINT ["./docker-entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["sh", "docker-entrypoint.sh"] \ No newline at end of file diff --git a/docker/snapshot/docker-entrypoint.sh b/docker/oap/docker-entrypoint.sh similarity index 84% rename from docker/snapshot/docker-entrypoint.sh rename to docker/oap/docker-entrypoint.sh index 451e9a8b7d..0c194b0b83 100755 --- a/docker/snapshot/docker-entrypoint.sh +++ b/docker/oap/docker-entrypoint.sh @@ -16,7 +16,7 @@ #!/bin/bash -set -e +set -ex CLASSPATH="config:$CLASSPATH" for i in oap-libs/*.jar @@ -24,6 +24,5 @@ do CLASSPATH="$i:$CLASSPATH" done -java ${JAVA_OPTS} -classpath $CLASSPATH \ - -Dstorage.elasticsearch.clusterNodes=elasticsearch:9200 \ - org.apache.skywalking.oap.server.starter.OAPServerStartUp +exec java ${JAVA_OPTS} -classpath $CLASSPATH \ + org.apache.skywalking.oap.server.starter.OAPServerStartUp "$@" diff --git a/docker/oap/log4j2.xml b/docker/oap/log4j2.xml new file mode 100644 index 0000000000..eb69a897dc --- /dev/null +++ b/docker/oap/log4j2.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docker/ui/Dockerfile b/docker/ui/Dockerfile new file mode 100644 index 0000000000..62e1432dc5 --- /dev/null +++ b/docker/ui/Dockerfile @@ -0,0 +1,40 @@ +# 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 + +ENV DIST_NAME=apache-skywalking-apm-incubating \ + JAVA_OPTS=" -Xms256M -Xmx512M" + +# Install required packages +RUN apk add --no-cache \ + bash + +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"; + +WORKDIR $DIST_NAME + +COPY docker-entrypoint.sh . +COPY logback.xml webapp/ + +EXPOSE 8080 + +ENTRYPOINT ["sh", "docker-entrypoint.sh"] \ No newline at end of file diff --git a/docker/ui/docker-entrypoint.sh b/docker/ui/docker-entrypoint.sh new file mode 100755 index 0000000000..a94d0eceb9 --- /dev/null +++ b/docker/ui/docker-entrypoint.sh @@ -0,0 +1,21 @@ +# 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 -ex + +exec java -jar webapp/skywalking-webapp.jar --logging.config=webapp/logback.xml "$@" diff --git a/docker/ui/logback.xml b/docker/ui/logback.xml new file mode 100644 index 0000000000..834036d7bf --- /dev/null +++ b/docker/ui/logback.xml @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/kubernetes/oap/00-rbac.yml b/kubernetes/oap/00-rbac.yml new file mode 100644 index 0000000000..95a989b6d7 --- /dev/null +++ b/kubernetes/oap/00-rbac.yml @@ -0,0 +1,41 @@ +# 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. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: skywalking-oap + namespace: skywalking +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: skywalking-oap +subjects: +- kind: ServiceAccount + name: skywalking-oap + namespace: skywalking + +--- + +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + namespace: skywalking + name: skywalking-oap +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["watch", "list"] \ No newline at end of file diff --git a/kubernetes/oap/01-config.yml b/kubernetes/oap/01-config.yml new file mode 100644 index 0000000000..b8aa585e52 --- /dev/null +++ b/kubernetes/oap/01-config.yml @@ -0,0 +1,338 @@ +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: oap-config + namespace: skywalking +data: + application.yml: |- + cluster: + kubernetes: + watchTimeoutSeconds: 60 + namespace: default + labelSelector: app=oap + uidEnvName: SKYWALKING_COLLECTOR_UID + core: + default: + restHost: 0.0.0.0 + restPort: 12800 + restContextPath: / + gRPCHost: 0.0.0.0 + gRPCPort: 11800 + downsampling: + - Hour + - Day + - Month + recordDataTTL: 90 # Unit is minute + minuteMetricsDataTTL: 90 # Unit is minute + hourMetricsDataTTL: 36 # Unit is hour + dayMetricsDataTTL: 45 # Unit is day + monthMetricsDataTTL: 18 # Unit is month + storage: + elasticsearch: + clusterNodes: localhost:9200 + indexShardsNumber: 2 + indexReplicasNumber: 0 + bulkActions: 2000 # Execute the bulk every 2000 requests + bulkSize: 20 # flush the bulk every 20mb + flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests + concurrentRequests: 2 # the number of concurrent requests + receiver-register: + default: + receiver-trace: + default: + bufferPath: /trace-buffer/ # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: 100 # Unit is MB + bufferDataMaxFileSize: 500 # Unit is MB + bufferFileCleanWhenRestart: false + receiver-jvm: + default: + service-mesh: + default: + bufferPath: /mesh-buffer/ # Path to trace buffer files, suggest to use absolute path + bufferOffsetMaxFileSize: 100 # Unit is MB + bufferDataMaxFileSize: 500 # Unit is MB + bufferFileCleanWhenRestart: false + istio-telemetry: + default: + query: + graphql: + path: /graphql + alarm: + default: + + log4j2.xml: |-- + + + + + + + + + + + + + + + + + + + alarm-settings.yml: |- + rules: + service_resp_time_rule: + indicator-name: service_resp_time + include-names: + - dubbox-provider + - dubbox-consumer + threshold: 1000 + op: ">" + period: 10 + count: 1 + webhooks: + + component-libraries.yml: |- + Tomcat: + id: 1 + languages: Java + HttpClient: + id: 2 + languages: Java,C#,Node.js + Dubbo: + id: 3 + languages: Java + H2: + id: 4 + languages: Java + Mysql: + id: 5 + languages: Java,C#,Node.js + ORACLE: + id: 6 + languages: Java + Redis: + id: 7 + languages: Java,C#,Node.js + Motan: + id: 8 + languages: Java + MongoDB: + id: 9 + languages: Java,C#,Node.js + Resin: + id: 10 + languages: Java + Feign: + id: 11 + languages: Java + OKHttp: + id: 12 + languages: Java + SpringRestTemplate: + id: 13 + languages: Java + SpringMVC: + id: 14 + languages: Java + Struts2: + id: 15 + languages: Java + NutzMVC: + id: 16 + languages: Java + NutzHttp: + id: 17 + languages: Java + JettyClient: + id: 18 + languages: Java + JettyServer: + id: 19 + languages: Java + Memcached: + id: 20 + languages: Java + ShardingJDBC: + id: 21 + languages: Java + PostgreSQL: + id: 22 + languages: Java,C#,Node.js + GRPC: + id: 23 + languages: Java + ElasticJob: + id: 24 + languages: Java + RocketMQ: + id: 25 + languages: Java + httpasyncclient: + id: 26 + languages: Java + Kafka: + id: 27 + languages: Java + ServiceComb: + id: 28 + languages: Java + Hystrix: + id: 29 + languages: Java + Jedis: + id: 30 + languages: Java + SQLite: + id: 31 + languages: Java,C# + h2-jdbc-driver: + id: 32 + languages: Java + mysql-connector-java: + id: 33 + languages: Java + Spymemcached: + id: 35 + languages: Java + Xmemcached: + id: 36 + languages: Java + postgresql-jdbc-driver: + id: 37 + languages: Java + rocketMQ-producer: + id: 38 + languages: Java + rocketMQ-consumer: + id: 39 + languages: Java + kafka-producer: + id: 40 + languages: Java + kafka-consumer: + id: 41 + languages: Java + mongodb-driver: + id: 42 + languages: Java + SOFARPC: + id: 43 + languages: Java + ActiveMQ: + id: 44 + languages: Java + activemq-producer: + id: 45 + languages: Java + activemq-consumer: + id: 46 + languages: Java + Elasticsearch: + id: 47 + languages: Java + transport-client: + id: 48 + languages: Java + AspNetCore: + id: 3001 + languages: C# + EntityFrameworkCore: + id: 3002 + languages: C# + SqlClient: + id: 3003 + languages: C# + CAP: + id: 3004 + languages: C# + StackExchange.Redis: + id: 3005 + languages: C# + SqlServer: + id: 3006 + languages: C# + Npgsql: + id: 3007 + languages: C# + MySqlConnector: + id: 3008 + languages: C# + EntityFrameworkCore.InMemory: + id: 3009 + languages: C# + EntityFrameworkCore.SqlServer: + id: 3010 + languages: C# + EntityFrameworkCore.Sqlite: + id: 3011 + languages: C# + Pomelo.EntityFrameworkCore.MySql: + id: 3012 + languages: C# + Npgsql.EntityFrameworkCore.PostgreSQL: + id: 3013 + languages: C# + InMemoryDatabase: + id: 3014 + languages: C# + AspNet: + id: 3015 + languages: C# + + # NoeJS components + # [4000, 5000) for Node.js agent + HttpServer: + id: 4001 + languages: Node.js + express: + id: 4002 + languages: Node.js + Egg: + id: 4003 + languages: Node.js + Koa: + id: 4004 + languages: Node.js + Component-Server-Mappings: + mongodb-driver: MongoDB + rocketMQ-producer: RocketMQ + rocketMQ-consumer: RocketMQ + kafka-producer: Kafka + kafka-consumer: Kafka + activemq-producer: ActiveMQ + activemq-consumer: ActiveMQ + postgresql-jdbc-driver: PostgreSQL + Xmemcached: Memcached + Spymemcached: Memcached + h2-jdbc-driver: H2 + mysql-connector-java: Mysql + Jedis: Redis + StackExchange.Redis: Redis + SqlClient: SqlServer + Npgsql: PostgreSQL + MySqlConnector: Mysql + EntityFrameworkCore.InMemory: InMemoryDatabase + EntityFrameworkCore.SqlServer: SqlServer + EntityFrameworkCore.Sqlite: SQLite + Pomelo.EntityFrameworkCore.MySql: Mysql + Npgsql.EntityFrameworkCore.PostgreSQL: PostgreSQL + transport-client: Elasticsearch + + diff --git a/kubernetes/oap/01-service.yml b/kubernetes/oap/01-service.yml index 4dcef4225a..34c95860e4 100644 --- a/kubernetes/oap/01-service.yml +++ b/kubernetes/oap/01-service.yml @@ -22,7 +22,6 @@ metadata: labels: service: oap spec: - clusterIP: None ports: - port: 12800 name: rest diff --git a/kubernetes/oap/02-deployment.yml b/kubernetes/oap/02-deployment.yml index e0d4344a0c..72be02a6f8 100644 --- a/kubernetes/oap/02-deployment.yml +++ b/kubernetes/oap/02-deployment.yml @@ -22,7 +22,7 @@ metadata: labels: app: oap spec: - replicas: 1 + replicas: 3 selector: matchLabels: app: oap @@ -30,6 +30,9 @@ spec: metadata: labels: app: oap + spec: + serviceAccountName: skywalking-oap + automountServiceAccountToken: false spec: containers: - name: oap @@ -46,4 +49,11 @@ spec: memory: 2Gi env: - name: JAVA_OPTS - value: -Xms256M -Xmx512M \ No newline at end of file + value: -Xms256M -Xmx512M + volumeMounts: + - name: config + mountPath: /apache-skywalking-apm-incubating/config + volumes: + - name: config + configMap: + name: oap-config \ No newline at end of file