Skywalking最新發(fā)布版5.0.0 beta2的單機(jī)及集群安裝說(shuō)明
1. 單機(jī)部署
- 單機(jī)部署組件需求:
- H2或ElasticSearch單機(jī)俄烁,以下僅示例ElasticSearch安裝及配置,便于拓展集群部署
- 官方說(shuō)明:
- 單機(jī)模式默認(rèn)使用本地H2數(shù)據(jù)庫(kù)辜妓,不支持集群部署。主要用于:預(yù)覽桨踪、功能測(cè)試掠归、演示和低壓力系統(tǒng)。
- 如果使用單機(jī)collector用于非演示環(huán)境卢鹦,你可選擇使用Elasticsearch作為存儲(chǔ)實(shí)現(xiàn)臀脏。
- 版本需求:
ElasticSearch: 5.x(建議使用5.x最高版本5.6.10) - 第三方軟件需求:
JDK8+ - 被監(jiān)控軟件需求:
JKD6+
1.1 ElasticSearch安裝說(shuō)明
#安裝ElasticSearch索引數(shù)據(jù)庫(kù),提供數(shù)據(jù)存儲(chǔ)及快速查詢
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.10.tar.gz
tar -xf elasticsearch-5.6.10.tar.gz
mv elasticsearch-5.6.10 elasticsearch
#創(chuàng)建Skywalking數(shù)據(jù)及日志存儲(chǔ)目錄
cd elasticsearch/
mkdir data
mkdir log
cd config/
#配置ElasticSearch單機(jī)節(jié)點(diǎn)信息冀自,date揉稚、logs目錄使用絕對(duì)路徑
cat >> elasticsearch.yml << EOF
cluster.name: CollectorDBCluster
node.name: node-1
path.data: /home/mon/apps/elasticsearch/data
path.logs: /home/mon/apps/elasticsearch/logs
network.host: 0.0.0.0
thread_pool.bulk.queue_size: 1000
http.port: 9200
EOF
#查看日志
tail -100f /home/mon/apps/elasticsearch/logs/CollectorDBCluster.log
#創(chuàng)建啟停腳本,添加到系統(tǒng)服務(wù)
cd bin/
cat >> elasticsearch.sh << EOF
cd "$(dirname "$0")" || exit 1
ES_HOME="$(pwd)"
EXEC_PATH=$ES_HOME
EXEC=elasticsearch
DAEMON=$EXEC_PATH/$EXEC
PID_FILE=$ES_HOME/elasticsearch.pid
ServiceName='Elasticsearch'
#操作
ACTION=$1
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; }
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }
usage() {
echo $'\n\n\n'
echoRed "Usage: ${0} support command {start|stop|restart|status}"
echo $'\n\n\n'
exit 1
}
psCheck() {
echo "-----------------All instances in this machine--------------------"
echo "$(ps -ef | grep ${ServiceName} | grep -E -v "grep|start|stop|status|restart")"
}
await() {
end=$(date +%s)
let "end+=10"
while
[[ $now -le $end ]]
do
now=$(date +%s)
sleep 1
done
}
#1.檢查操作參數(shù)
[ $# -gt 0 ] || usage
if [ ! -x $DAEMON ] ; then
echo "ERROR: $DAEMON not found"
exit 1
fi
#根據(jù)PID檢查是否在運(yùn)行
isRunningPid() {
ps -p "$1" &>/dev/null
}
#根據(jù)PID_FILE檢查是否在運(yùn)行
isRunning() {
[[ -f "$PID_FILE" ]] || return 1
local pid=$(cat "$PID_FILE")
ps -p "$pid" &>/dev/null
return
}
start() {
echo "--------------Starting $ServiceName:"
echo $'\n\n\n'
#檢查已經(jīng)運(yùn)行
if isRunning "$PID_FILE"; then
echoYellow "Result: Running, no need to start"
echo $'\n\n\n'
exit 0
fi
echo "Boot Command: nohup $DAEMON"
echo $'\n\n\n'
nohup $DAEMON >/dev/null 2>&1 &
#$DAEMON -d
disown $!
echo $! >"$PID_FILE"
#等5秒
await
TIMEOUT=100
while (! isRunning "$APP_PID"); do
if ((TIMEOUT-- == 0)); then
echoRed "Result: Start timeout"
echo $'\n\n\n'
exit 1
fi
sleep 1
done
echoGreen "Result: Start success,Running (PID: $(<$PID_FILE))"
echo $'\n\n\n'
psCheck
}
stop() {
echo "--------------Stopping $ServiceName:"
echo $'\n\n\n'
if [ ! -f "$PID_FILE" ]; then
echoYellow "Result: Not running"
echo $'\n\n\n'
psCheck
return 0
fi
local pid=$(<${PID_FILE})
if [ -z $pid ]; then
#pid文件存在熬粗,但進(jìn)程卻不存在
echoRed "Result: Not running (PID: $pid not found)"
echo $'\n\n\n'
psCheck
rm -f "$PID_FILE"
return 0
fi
kill "$pid" 2>/dev/null
TIMEOUT=30
while isRunning $PID_FILE; do
if ((TIMEOUT-- == 0)); then
kill -KILL "$PID" 2>/dev/null
fi
sleep 1
done
rm -f "$PID_FILE"
echoGreen "Result: Stop success"
echo $'\n\n\n'
}
status() {
echo "--------------Status $ServiceName:"
echo $'\n\n\n'
[[ -f "$PID_FILE" ]] || {
echoYellow "Result: Not running"
echo $'\n\n\n'
psCheck
return 1
}
local pid=$(<$PID_FILE)
if isRunningPid $pid; then
echoGreen "Result: Running (PID: $pid )"
echo $'\n\n\n'
psCheck
return 0
else
echoRed "Result: Not running (PID: $pid not found)"
echo $'\n\n\n'
psCheck
return 1
fi
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
usage
;;
esac
#成功退出
exit 0
EOF
ln -s 'readlink -f /home/mon/apps/elasticsearch/bin/elasticsearch.sh' /usr/local/bin/elasticsearch
#直接后臺(tái)啟動(dòng)
./elasticsearch -d
#啟動(dòng)
service elasticsearch start && service elasticsearch status
#添加防火墻
firewall-cmd --add-port=9200/tcp --permanent ;\
firewall-cmd --add-port=9300/tcp --permanent ;\
firewall-cmd --reload
1.1.1 URL查詢
- 數(shù)據(jù)索引查詢: http://10.20.30.123:9200/_cat/indices
- 集群節(jié)點(diǎn)信息: http://10.20.30.123:9200/_cat/health?v
1.2 安裝Skywalking單機(jī)模式
#包括Collector收集器搀玖,Agent探針,WebUI響應(yīng)界面
wget http://www-eu.apache.org/dist/incubator/skywalking/5.0.0-beta2/apache-skywalking-apm-incubating-5.0.0-beta2.tar.gz
tar -xf apache-skywalking-apm-incubating-5.0.0-beta2.tar.gz
mv apache-skywalking-apm-incubating skywalking
cd skywalking/bin
#啟動(dòng)Collector驻呐、WebUI
./startup.sh
#在目標(biāo)應(yīng)用上啟用Agent探針
java -javaagent=/home/mon/apps/skywalking/agent/skywalking-agent.jar -jar order.jar
#添加啟動(dòng)參數(shù)灌诅,定義命名空間和項(xiàng)目編碼
java -javaagent=/home/mon/apps/skywalking/agent/skywalking-agent.jar -jar -Dskywalking.agent.namespace=order -Dskywalking.agent.application_code=order order.jar
1.2.1 SkyWalking監(jiān)控界面URL: http://10.20.30.123:8080
1.3 部署探針
- 拷貝skywalking-agent目錄到所需位置,探針包含整個(gè)目錄含末,請(qǐng)不要改變目錄結(jié)構(gòu)
- 增加JVM啟動(dòng)參數(shù)猜拾,
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
。參數(shù)值為skywalking-agent.jar的絕對(duì)路徑答渔。
新目錄結(jié)構(gòu)如下:
+-- skywalking-agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
+-- config
agent.config
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
skywalking-agent.jar
-
/config/agent.config
包含探針?biāo)枧渲霉卮形恼f(shuō)明如下。
# 當(dāng)前的應(yīng)用編碼,最終會(huì)顯示在webui上宋雏。
# 建議一個(gè)應(yīng)用的多個(gè)實(shí)例,使用有相同的application_code磨总。請(qǐng)使用英文
agent.application_code=Your_ApplicationName
# 每三秒采樣的Trace數(shù)量
# 默認(rèn)為負(fù)數(shù),代表在保證不超過(guò)內(nèi)存Buffer區(qū)的前提下蚪燕,采集所有的Trace
# agent.sample_n_per_3_secs=-1
# 設(shè)置需要忽略的請(qǐng)求地址
# 默認(rèn)配置如下
# agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
# 探針調(diào)試開關(guān),如果設(shè)置為true馆纳,探針會(huì)將所有操作字節(jié)碼的類輸出到/debugging目錄下
# skywalking團(tuán)隊(duì)可能在調(diào)試,需要此文件
# agent.is_open_debugging_class = true
# 對(duì)應(yīng)Collector的config/application.yml配置文件中 agent_server/jetty/port 配置內(nèi)容
# 例如:
# 單節(jié)點(diǎn)配置:SERVERS="127.0.0.1:8080"
# 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600"
collector.servers=127.0.0.1:10800
# 日志文件名稱前綴
logging.file_name=skywalking-agent.log
# 日志文件最大大小
# 如果超過(guò)此大小鉴裹,則會(huì)生成新文件。
# 默認(rèn)為300M
logging.max_file_size=314572800
# 日志級(jí)別径荔,默認(rèn)為DEBUG。
logging.level=DEBUG
- 啟動(dòng)被監(jiān)控應(yīng)用脆霎。
1.3.1 高級(jí)特性
- 插件會(huì)被統(tǒng)一放置在
plugins
目錄中,新的插件睛蛛,也只需要在啟動(dòng)階段,放在目錄中玖院,就自動(dòng)生效。刪除則失效难菌。 - 配置除了通過(guò)
/config/agent.config
文件外,可以通過(guò)環(huán)境變量和VM參數(shù)(-D)來(lái)進(jìn)行設(shè)置- 參數(shù)的key =
skywalking.
+agent.config
文件中的key - 優(yōu)先級(jí):系統(tǒng)環(huán)境變量 > VM參數(shù)(-D) >
/config/agent.config
中的配置
- 參數(shù)的key =
- Log默認(rèn)使用文件輸出郊酒,輸出到
/logs
目錄中
1.3.2 Tomcat配置探針FAQ
- Linux Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.sh
遇绞,在首行加入如下信息
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
- Windows Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.bat
,在首行加入如下信息
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
- JAR 部署
修改啟動(dòng)命令添加啟動(dòng)參數(shù)-javaagent
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
2. 集群部署
- 組件需求:
- Elasticsearch 5.x
- Zookeeper 3.4.10
- 其他需求同上單機(jī)部署
2.1 Elasticsearch集群部署
? 安裝參考上面的單機(jī)部署燎窘,以下僅演示配置及集群部署
#安裝ElasticSearch索引數(shù)據(jù)庫(kù)摹闽,提供數(shù)據(jù)存儲(chǔ)及快速查詢
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.10.tar.gz
tar -xf elasticsearch-5.6.10.tar.gz
mv elasticsearch-5.6.10 elasticsearch
#創(chuàng)建Skywalking數(shù)據(jù)及日志存儲(chǔ)目錄
cd elasticsearch/
mkdir data
mkdir log
cd config/
#配置ElasticSearch單機(jī)節(jié)點(diǎn)信息,date褐健、logs目錄使用絕對(duì)路徑
cat >> elasticsearch.yml << EOF
cluster.name: CollectorDBCluster
node.name: node-1
path.data: /home/mon/apps/elasticsearch/data
path.logs: /home/mon/apps/elasticsearch/logs
network.host: 0.0.0.0
thread_pool.bulk.queue_size: 1000
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.20.30.123:9300", "10.20.30.124:9300","10.20.30.125:9300"]
discovery.zen.minimum_master_nodes: 2
EOF
#同步ElasticSearch到同集群其他機(jī)器
scp -r ./elasticsearch mon@10.20.30.124:/home/mon/apps
scp -r ./elasticsearch mon@10.20.30.125:/home/mon/apps
#開啟防火墻端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
firewall-cmd --reload
2.2 Zookeeper集群部署
#安裝zookeeper注冊(cè)發(fā)現(xiàn)中心
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar -xf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 zookeeper
cd zookeeper/conf/
#寫入Zookeeper集群配置文件付鹿,data目錄使用絕對(duì)路徑
cat > zoo.cfg <<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/mon/apps/zookeeper/data
clientPort=2181
server.1=10.20.30.123:2888:3888
server.2=10.20.30.124:2888:3888
server.3=10.20.30.125:2888:3888
EOF
#創(chuàng)建一個(gè)tmp文件夾澜汤,存放myid
mkdir /home/mon/apps/zookeeper/tmp
echo 1 > /home/mon/apps/zookeeper/tmp/myid
#分發(fā)安裝包
#將配置好的zookeeper拷貝到其他節(jié)點(diǎn)
scp -r ./zookeeper mon@10.20.30.124:/home/mon/apps
scp -r ./zookeeper mon@10.20.30.125:/home/mon/apps
#注意:修改另外兩臺(tái)服務(wù)器對(duì)應(yīng)/home/mon/apps/zookeeper/tmp/myid內(nèi)容
#server.2
echo 2 > /home/mon/apps/zookeeper/tmp/myid
#server.3
echo 2 > /home/mon/apps/zookeeper/tmp/myid
#開放防火墻端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --reload
#啟動(dòng)集群,按server.1舵匾、server.2俊抵、server.3的順序分別啟動(dòng)Zookeeper服務(wù)
cd /home/mon/apps/zookeeper/bin
./zkServer.sh start
#停止集群,分別停止Zookeeper服務(wù)
./zkServer.sh stop
#查詢Zookeeper節(jié)點(diǎn)狀態(tài)
./zkServer.sh status
2.3 SkyWalking集群部署
#包括Collector收集器坐梯,Agent探針徽诲,WebUI響應(yīng)界面
wget http://www-eu.apache.org/dist/incubator/skywalking/5.0.0-beta2/apache-skywalking-apm-incubating-5.0.0-beta2.tar.gz
tar -xf apache-skywalking-apm-incubating-5.0.0-beta2.tar.gz
mv apache-skywalking-apm-incubating skywalking
#配置Zookeeper、ElasticSearch集群
cd skywalking/config
find . -name 'application.yml' |grep admin |xargs sed -i 's/#cluster:/cluster:/g'
find . -name 'application.yml' |grep admin |xargs sed -i 's/# zookeeper:/ zookeeper:/g'
find . -name 'application.yml' |grep admin |xargs sed -i 's/# hostPort: localhost:2181/ hostPort: 10.20.30.123:2181,10.20.30.124:2181,10.20.30.125:2181/g'
find . -name 'application.yml' |grep admin |xargs sed -i 's/# sessionTimeout: 100000/ sessionTimeout: 100000/g'
find . -name 'application.yml' |grep admin |xargs sed -i 's/ host: localhost/ host: 0.0.0.0/g'
find . -name 'application.yml' |grep admin |xargs sed -i 's/ clusterNodes: localhost:9300/ clusterNodes: 10.20.30.123:9300,10.20.30.124:9300,10.20.30.125:9300/g'
#配置WebUI訪問(wèn)Collector集群
cd ../webapp
find . -name 'webapp.yml' |grep admin |xargs sed -i 's/ listOfServers: 127.0.0.1:10800/ listOfServers: 10.20.30.123:10800,10.20.30.124:10800,10.20.30.125:10800/g'
#配置WebUI端口號(hào)吵血,可使用默認(rèn)8080谎替,以下僅做示例,根據(jù)實(shí)際需求修改
find . -name 'application.yml' |grep admin |xargs sed -i 's/ port: 8080/ port: 8081/g'
#開放防火墻端口
#8080為WebUI組件使用的端口號(hào)蹋辅,可在webapp.yml中修改
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=10800/tcp --permanent
firewall-cmd --zone=public --add-port=11800/tcp --permanent
firewall-cmd --zone=public --add-port=12800/tcp --permanent
firewall-cmd --reload
#啟動(dòng)Collector钱贯、WebUI,在集群機(jī)器上分別啟動(dòng)
cd ../bin
./startup.sh
#也可分別啟動(dòng)Collector和WebUI
./collectorService.sh
./webappService.sh
2.4 Agent探針集群部署
#配置SkyWalking集群
cd ../agent/config
find . -name 'application.yml' |grep admin |xargs sed -i 's/# collector.direct_servers=www.skywalking.service.io/collector.direct_servers=10.20.30.123:11800,10.20.30.124:11800,10.20.30.125:11800/g'
#分發(fā)Agent探針晕翠,在部署SkyWalking的機(jī)器上
cd skywalking
scp -r agent mon@10.20.30.126:/home/mon/apps/
#探針啟動(dòng)方式參考上面單機(jī)模式部署