1. 环境准备
1.1. 用于搭建 SkyWalking 的三台服务器
1.1.1. 服务器
- 10.1.62.78
- 10.1.62.79
- 10.1.62.80
1.1.2. 需要端口
- 11800(gRPC 数据收集和内网节点间通信)
- 12800(SkyWalking UI 查询和 HTTP 数据收集)
- 8080(SkyWalking UI 端口)
1.1.3. 需要 JDK
1.1.4. 创建 SkyWalking 用户
- 三台都要执行 - useradd skywalking passwd skywalking 
1.2. Nacos 集群
- 10.1.62.78:8848
- 10.1.63.117:8848
- 10.1.63.118:8848
1.3. ElasticSearch 集群
- 10.1.63.116:9200
- 10.1.63.116:9201
- 10.1.63.117:9200
1.4. Nginx
- 10.1.62.78
2. 安装过程
- **之后过程没有明确说明都在 10.1.62.78上执行,用户为skywalking**。
2.1. 无密码 ssh 登录其他节点
- 执行命令 - ssh-keygen -t rsa。
- 设置无密码登录。 - ssh-copy-id -p 19222 skywalking@10.1.62.78 ssh-copy-id -p 19222 skywalking@10.1.62.79 ssh-copy-id -p 19222 skywalking@10.1.62.80
2.2. 配置环境变量
2.2.1 创建环境变量脚本
cd /home/skywalking
cat > environment.sh << EOF
#!/usr/bin/bash
# SkyWalking 集群各机器 IP 数组
export SKYWALKING_NODE_IPS=(10.1.62.78 10.1.62.79 10.1.62.80)
export SKYWALKING_NODES="10.1.62.78:12800,10.1.62.79:12800,10.1.62.80:12800"
# Nacos 集群各机器 IP 及端口
export NACOS_NODE_IPS=(10.1.62.78 10.1.63.117 10.1.63.118)
export NACOS_NODE_PORTS=(8848 8848 8848)
export SW_CLUSTER_NACOS_HOST_PORT="10.1.62.78:8848,10.1.63.117:8848,10.1.63.118:8848"
# ES 集群名
export ELASTICSEARCH_NODE_IPS=(10.1.63.116 10.1.63.116 10.1.63.117)
export ELASTICSEARCH_NODE_PORTS=(9200 9201 9200)
export ELASTICSEARCH_CLUSTER_NAME="elasticsearch-cluster"
# ES 集群各机器 IP 及端口
export ELASTICSEARCH_CLUSTER_NODES="10.1.63.116:9200,10.1.63.116:9201,10.1.63.117:9200"
# ES 用户名
export ELASTICSEARCH_CLUSTER_USER="elastic"
# ES 密码
export ELASTICSEARCH_CLUSTER_PASSWORD="elastic"
EOF
2.2.2. 脚本分发到其他服务器
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp -P 19222 /home/skywalking/environment.sh skywalking@${node_ip}:/home/skywalking/
  done
2.3. 环境检测
2.3.1. Nacos 集群检测
source /home/skywalking/environment.sh
for i in "${!NACOS_NODE_IPS[@]}";
  do
    echo ">>> ${NACOS_NODE_IPS[$i]}"
    echo -e "\n" | telnet ${NACOS_NODE_IPS[$i]} ${NACOS_NODE_PORTS[$i]} | grep Connected
  done
2.3.2. ES 集群检测
source /home/skywalking/environment.sh
for i in "${!ELASTICSEARCH_NODE_IPS[@]}";
  do
    echo ">>> ${ELASTICSEARCH_NODE_IPS[$i]}:${ELASTICSEARCH_NODE_PORTS[$i]}"
    echo -e "\n" | telnet ${ELASTICSEARCH_NODE_IPS[$i]} ${ELASTICSEARCH_NODE_PORTS[$i]} | grep Connected
  done
2.4. 下载并解压 SkyWalking 官方包
2.4.1. 下载
mkdir /home/skywalking/Softwares
cd /home/skywalking/Softwares/
wget https://mirror.bit.edu.cn/apache/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz
2.4.2. 分发服务器
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "mkdir /home/skywalking/Softwares"
    scp -P 19222 /home/skywalking/Softwares/apache-skywalking-apm-es7-8.1.0.tar.gz skywalking@${node_ip}:/home/skywalking/Softwares/
  done
2.4.3. 解压
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "tar zxvf /home/skywalking/Softwares/apache-skywalking-apm-es7-8.1.0.tar.gz -C /home/skywalking/"
  done
2.5. SkyWalking OAP 搭建
2.5.1. 备份 OAP 配置文件
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "mv /home/skywalking/apache-skywalking-apm-bin-es7/config/application.yml /home/skywalking/apache-skywalking-apm-bin-es7/config/application.yml.bak"
  done
2.5.2. 创建新的 OAP 配置文件
cd /home/skywalking/apache-skywalking-apm-bin-es7/config/
touch application.yml
2.5.3. 使用 vi 命令编辑 application.yml 文件,写入以下内容
- 如果缩进和注释有问题,配合 - :set paste、- :set nopaste命令写入。- 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: selector: ##SW_CLUSTER_SELECTOR## standalone: - Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+- library the oap-libs folder with your ZooKeeper 3.4.x library.- 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 # Enable ACL enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default schema: ${SW_ZK_SCHEMA:digest} # only support digest schema expression: ${SW_ZK_EXPRESSION:skywalking:skywalking} kubernetes: namespace: ${SW_CLUSTER_K8S_NAMESPACE:default} labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking} uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID} 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} aclToken: ${SW_CLUSTER_CONSUL_ACLTOKEN:""} etcd: serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} # etcd cluster nodes, example: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379 hostPort: ${SW_CLUSTER_ETCD_HOST_PORT:localhost:2379} nacos: serviceName: ##SW_NACOS_SERVICE_NAME## hostPort: ##SW_CLUSTER_NACOS_HOST_PORT## # Nacos Configuration namespace namespace: ##SW_CLUSTER_NACOS_NAMESPACE## # the host registered and other oap node use this to communicate with current node internalComHost: ##SW_CLUSTER_NACOS_INTERNAL_COM_HOST## # the port registered and other oap node use this to communicate with current node internalComPort: ##SW_CLUSTER_NACOS_INTERNAL_COM_PORT## core: selector: ${SW_CORE:default} 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:/} restMinThreads: ${SW_CORE_REST_JETTY_MIN_THREADS:1} restMaxThreads: ${SW_CORE_REST_JETTY_MAX_THREADS:200} restIdleTimeOut: ${SW_CORE_REST_JETTY_IDLE_TIMEOUT:30000} restAcceptorPriorityDelta: ${SW_CORE_REST_JETTY_DELTA:0} restAcceptQueueSize: ${SW_CORE_REST_JETTY_QUEUE_SIZE:0} gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0} gRPCPort: ${SW_CORE_GRPC_PORT:11800} gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false} gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""} gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""} gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""} downsampling: - Hour - Day # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted. enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close. dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day # Cache metrics data for 1 minute to reduce database queries, and if the OAP cluster changes within that minute, # the metrics may not be accurate within that minute. enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true} topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute # Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query, # and it will cause more load for memory, network of OAP and storage. # But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party tool, such as Kibana->ES, to query the data by themselves. activeExtraModelColumns: ${SW_CORE_ACTIVE_EXTRA_MODEL_COLUMNS:false} # The max length of service + instance names should be less than 200 serviceNameMaxLength: ${SW_SERVICE_NAME_MAX_LENGTH:70} instanceNameMaxLength: ${SW_INSTANCE_NAME_MAX_LENGTH:70} # The max length of service + endpoint names should be less than 240 endpointNameMaxLength: ${SW_ENDPOINT_NAME_MAX_LENGTH:150} storage: selector: ##SW_STORAGE_SELECTOR## elasticsearch: nameSpace: ${SW_NAMESPACE:""} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""} trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""} user: ${SW_ES_USER:""} password: ${SW_ES_PASSWORD:""} secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool. dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index. indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} # Super data set has been defined in the codes, such as trace segments. This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces. indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests 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 resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000} metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000} segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200} profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200} advanced: ${SW_STORAGE_ES_ADVANCED:""} elasticsearch7: nameSpace: ##SW_NAMESPACE_ES7## clusterNodes: ##SW_STORAGE_ES_CLUSTER_NODES## protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""} trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""} dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index. user: ##SW_ES_USER## password: ##SW_ES_PASSWORD## secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool. indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} # Super data set has been defined in the codes, such as trace segments. This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces. indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests 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 resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000} metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000} segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200} profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200} advanced: ${SW_STORAGE_ES_ADVANCED:""} 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} mysql: properties: jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"} dataSource.user: ${SW_DATA_SOURCE_USER:root} dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234} dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true} dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250} dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048} dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true} metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000} influxdb: # InfluxDB configuration url: ${SW_STORAGE_INFLUXDB_URL:http://localhost:8086} user: ${SW_STORAGE_INFLUXDB_USER:root} password: ${SW_STORAGE_INFLUXDB_PASSWORD:} database: ${SW_STORAGE_INFLUXDB_DATABASE:skywalking} actions: ${SW_STORAGE_INFLUXDB_ACTIONS:1000} # the number of actions to collect duration: ${SW_STORAGE_INFLUXDB_DURATION:1000} # the time to wait at most (milliseconds) fetchTaskLogMaxSize: ${SW_STORAGE_INFLUXDB_FETCH_TASK_LOG_MAX_SIZE:5000} # the max number of fetch task log in a request agent-analyzer: selector: ${SW_AGENT_ANALYZER:default} default: 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-sharing-server: selector: ${SW_RECEIVER_SHARING_SERVER:default} default: host: ${SW_RECEIVER_JETTY_HOST:0.0.0.0} contextPath: ${SW_RECEIVER_JETTY_CONTEXT_PATH:/} authentication: ${SW_AUTHENTICATION:""} jettyMinThreads: ${SW_RECEIVER_SHARING_JETTY_MIN_THREADS:1} jettyMaxThreads: ${SW_RECEIVER_SHARING_JETTY_MAX_THREADS:200} jettyIdleTimeOut: ${SW_RECEIVER_SHARING_JETTY_IDLE_TIMEOUT:30000} jettyAcceptorPriorityDelta: ${SW_RECEIVER_SHARING_JETTY_DELTA:0} jettyAcceptQueueSize: ${SW_RECEIVER_SHARING_JETTY_QUEUE_SIZE:0} receiver-register: selector: ${SW_RECEIVER_REGISTER:default} default: - receiver-trace: selector: ${SW_RECEIVER_TRACE:default} default: - receiver-jvm: selector: ${SW_RECEIVER_JVM:default} default: - receiver-clr: selector: ${SW_RECEIVER_CLR:default} default: - receiver-profile: selector: ${SW_RECEIVER_PROFILE:default} default: - service-mesh: selector: ${SW_SERVICE_MESH:default} default: - istio-telemetry: selector: ${SW_ISTIO_TELEMETRY:default} default: - envoy-metric: selector: ${SW_ENVOY_METRIC:default} default: acceptMetricsService: ${SW_ENVOY_METRIC_SERVICE:true} alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:""} prometheus-fetcher: selector: ${SW_PROMETHEUS_FETCHER:default} default: active: ${SW_PROMETHEUS_FETCHER_ACTIVE:false} kafka-fetcher: selector: ${SW_KAFKA_FETCHER:-} default: bootstrapServers: ${SW_KAFKA_FETCHER_SERVERS:localhost:9092} partitions: ${SW_KAFKA_FETCHER_PARTITIONS:3} replicationFactor: ${SW_KAFKA_FETCHER_PARTITIONS_FACTOR:2} enableMeterSystem: ${SW_KAFKA_FETCHER_ENABLE_METER_SYSTEM:false} isSharding: ${SW_KAFKA_FETCHER_IS_SHARDING:false} consumePartitions: ${SW_KAFKA_FETCHER_CONSUME_PARTITIONS:""} receiver-meter: selector: ${SW_RECEIVER_METER:-} default: - receiver-oc: selector: ${SW_OC_RECEIVER:-} default: gRPCHost: ${SW_OC_RECEIVER_GRPC_HOST:0.0.0.0} gRPCPort: ${SW_OC_RECEIVER_GRPC_PORT:55678} receiver_zipkin: selector: ${SW_RECEIVER_ZIPKIN:-} default: host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0} port: ${SW_RECEIVER_ZIPKIN_PORT:9411} contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/} jettyMinThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MIN_THREADS:1} jettyMaxThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MAX_THREADS:200} jettyIdleTimeOut: ${SW_RECEIVER_ZIPKIN_JETTY_IDLE_TIMEOUT:30000} jettyAcceptorPriorityDelta: ${SW_RECEIVER_ZIPKIN_JETTY_DELTA:0} jettyAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_QUEUE_SIZE:0} receiver_jaeger: selector: ${SW_RECEIVER_JAEGER:-} default: gRPCHost: ${SW_RECEIVER_JAEGER_HOST:0.0.0.0} gRPCPort: ${SW_RECEIVER_JAEGER_PORT:14250} query: selector: ${SW_QUERY:graphql} graphql: path: ${SW_QUERY_GRAPHQL_PATH:/graphql} alarm: selector: ${SW_ALARM:default} default: - telemetry: selector: ${SW_TELEMETRY:none} none: prometheus: host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0} port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234} configuration: selector: ${SW_CONFIGURATION:none} none: grpc: host: ${SW_DCS_SERVER_HOST:""} port: ${SW_DCS_SERVER_PORT:80} clusterName: ${SW_DCS_CLUSTER_NAME:SkyWalking} period: ${SW_DCS_PERIOD:20} apollo: apolloMeta: ${SW_CONFIG_APOLLO:http://106.12.25.204:8080} apolloCluster: ${SW_CONFIG_APOLLO_CLUSTER:default} apolloEnv: ${SW_CONFIG_APOLLO_ENV:""} appId: ${SW_CONFIG_APOLLO_APP_ID:skywalking} period: ${SW_CONFIG_APOLLO_PERIOD:5} zookeeper: period: ${SW_CONFIG_ZK_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds. nameSpace: ${SW_CONFIG_ZK_NAMESPACE:/default} hostPort: ${SW_CONFIG_ZK_HOST_PORT:localhost:2181} # Retry Policy baseSleepTimeMs: ${SW_CONFIG_ZK_BASE_SLEEP_TIME_MS:1000} # initial amount of time to wait between retries maxRetries: ${SW_CONFIG_ZK_MAX_RETRIES:3} # max number of times to retry etcd: period: ${SW_CONFIG_ETCD_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds. group: ${SW_CONFIG_ETCD_GROUP:skywalking} serverAddr: ${SW_CONFIG_ETCD_SERVER_ADDR:localhost:2379} clusterName: ${SW_CONFIG_ETCD_CLUSTER_NAME:default} consul: # Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500 hostAndPorts: ${SW_CONFIG_CONSUL_HOST_AND_PORTS:1.2.3.4:8500} # Sync period in seconds. Defaults to 60 seconds. period: ${SW_CONFIG_CONSUL_PERIOD:60} # Consul aclToken aclToken: ${SW_CONFIG_CONSUL_ACL_TOKEN:""} k8s-configmap: period: ${SW_CONFIG_CONFIGMAP_PERIOD:60} namespace: ${SW_CLUSTER_K8S_NAMESPACE:default} labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking} nacos: # Nacos Server Host serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:127.0.0.1} # Nacos Server Port port: ${SW_CONFIG_NACOS_SERVER_PORT:8848} # Nacos Configuration Group group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking} # Nacos Configuration namespace namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:} # Unit seconds, sync period. Default fetch every 60 seconds. period: ${SW_CONFIG_NACOS_PERIOD:60} exporter: selector: ${SW_EXPORTER:-} grpc: targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1} targetPort: ${SW_EXPORTER_GRPC_PORT:9870} health-checker: selector: ${SW_HEALTH_CHECKER:-} default: checkIntervalSeconds: ${SW_HEALTH_CHECKER_INTERVAL_SECONDS:5} 
2.5.4. 修改 OAP 配置文件
source /home/skywalking/environment.sh
cd /home/skywalking/apache-skywalking-apm-bin-es7/config
sed -i -e 's/##SW_CLUSTER_SELECTOR##/nacos/g' application.yml
sed -i -e 's/##SW_NACOS_SERVICE_NAME##/SkyWalking-OAP-Cluster/g' application.yml
sed -i -e 's/##SW_CLUSTER_NACOS_HOST_PORT##/'${SW_CLUSTER_NACOS_HOST_PORT}'/g' application.yml
sed -i -e 's/##SW_CLUSTER_NACOS_NAMESPACE##/public/g' application.yml
sed -i -e 's/##SW_CLUSTER_NACOS_INTERNAL_COM_PORT##/11800/g' application.yml
sed -i -e 's/##SW_STORAGE_SELECTOR##/elasticsearch7/g' application.yml
sed -i -e 's/##SW_NAMESPACE_ES7##/'${ELASTICSEARCH_CLUSTER_NAME}'/g' application.yml
sed -i -e 's/##SW_STORAGE_ES_CLUSTER_NODES##/'${ELASTICSEARCH_CLUSTER_NODES}'/g' application.yml
sed -i -e 's/##SW_ES_USER##/'${ELASTICSEARCH_CLUSTER_USER}'/g' application.yml
sed -i -e 's/##SW_ES_PASSWORD##/'${ELASTICSEARCH_CLUSTER_PASSWORD}'/g' application.yml
2.5.5. 分发 OAP 配置文件
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp -P 19222 /home/skywalking/apache-skywalking-apm-bin-es7/config/application.yml skywalking@${node_ip}:/home/skywalking/apache-skywalking-apm-bin-es7/config/
  done
2.5.6. 针对每台服务器的配置修改
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "sed -i -e 's/##SW_CLUSTER_NACOS_INTERNAL_COM_HOST##/'${node_ip}'/g' /home/skywalking/apache-skywalking-apm-bin-es7/config/application.yml"
  done
2.5.7. 启动 OAP 服务
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "export PATH=$PATH:/usr/local/java/jdk1.8.0_152/bin/ && /home/skywalking/apache-skywalking-apm-bin-es7/bin/oapService.sh"
  done
- JDK 目录自行修改。
2.5.8. 查看日志
tail -f /home/skywalking/apache-skywalking-apm-bin-es7/logs/skywalking-oap-server.log
2.6. SkyWalking UI 搭建
2.6.1. 备份 UI 配置文件
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "mv /home/skywalking/apache-skywalking-apm-bin-es7/webapp/webapp.yml /home/skywalking/apache-skywalking-apm-bin-es7/webapp/webapp.yml.bak"
  done
2.6.2. 创建新的 UI 配置文件
cd /home/skywalking/apache-skywalking-apm-bin-es7/webapp
touch webapp.yml
2.6.3. 使用 vi 命令编辑 webapp.yml 文件,写入以下内容
- 如果缩进和注释有问题,配合 - :set paste、- :set nopaste命令写入。- 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.- server: port: ##SW_UI_PORT## - collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: ##SW_SERVERS_LIST## 
2.6.4. 修改 UI 配置文件
source /home/skywalking/environment.sh
cd /home/skywalking/apache-skywalking-apm-bin-es7/webapp/
sed -i -e 's/##SW_UI_PORT##/8080/g' webapp.yml
sed -i -e 's/##SW_SERVERS_LIST##/'${SKYWALKING_NODES}'/g' webapp.yml
2.6.5. 分发 UI 配置文件
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp -P 19222 /home/skywalking/apache-skywalking-apm-bin-es7/webapp/webapp.yml skywalking@${node_ip}:/home/skywalking/apache-skywalking-apm-bin-es7/webapp/
  done
2.6.6. 启动 UI 服务
source /home/skywalking/environment.sh
for node_ip in ${SKYWALKING_NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh -p 19222 skywalking@${node_ip} "export PATH=$PATH:/usr/local/java/jdk1.8.0_152/bin/ && /home/skywalking/apache-skywalking-apm-bin-es7/bin/webappService.sh"
  done
- JDK 目录自行修改。
2.6.7. 查看日志
tail -f /home/skywalking/apache-skywalking-apm-bin-es7/logs/webapp.log
2.7. Nginx 配置代理
- 使用 nginx 对应的用户操作。
2.7.1. 创建 nginx 日志目录
mkdir /home/skywalking/logs/nginx
2.7.2. 创建配置文件
cd /usr/local/nginx-1.19.2/conf/conf.d
touch skywalking.conf
- 自行修改 nginx 配置目录。
2.7.3. 使用 vi 编辑 skywalking.conf 文件,写入以下内容
- 如果缩进和注释有问题,配合 - :set paste、- :set nopaste命令写入。- upstream skywalking.com { server 10.1.62.78:8080; server 10.1.62.79:8080; server 10.1.62.80:8080; } - server{ - listen 8090; server_name 10.1.62.78; access_log /home/skywalking/logs/nginx/access_skywalking.log main; location / { proxy_pass http://skywalking.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }- } 
2.7.4. 配置生效
/usr/local/nginx-1.19.2/sbin/nginx -s reload
- 自行修改 nginx 目录。
2.8. UI 访问
- 访问地址:http://10.1.62.78:8090- IP 地址自行修改。
 

 
  
  
  
 
 
  
 
 
 