123 lines
3.4 KiB
Bash
123 lines
3.4 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
# 定义变量
|
|||
|
|
CONTAINER_NAME="skywalking-ui"
|
|||
|
|
IMAGE_NAME="apache/skywalking-ui:9.4.0" # SkyWalking UI 镜像及版本
|
|||
|
|
LOGS_DIR="/docker-data/skywalking/ui/logs" # 日志目录
|
|||
|
|
PORT=9601 # UI 访问端口
|
|||
|
|
NETWORK_NAME="scm-net"
|
|||
|
|
UI_IP="10.10.2.102" # 固定IP,与ES、OAP在同一网段
|
|||
|
|
OAP_HOST="10.10.2.102" # 关联的OAP服务器IP
|
|||
|
|
OAP_PORT=12800 # OAP gRPC端口
|
|||
|
|
|
|||
|
|
# 显示帮助信息
|
|||
|
|
show_help() {
|
|||
|
|
echo "使用方法: $0 [操作类型]"
|
|||
|
|
echo "操作类型:"
|
|||
|
|
echo " deploy - 部署并启动SkyWalking UI容器"
|
|||
|
|
echo " remove - 停止并删除SkyWalking UI容器及日志目录"
|
|||
|
|
echo " logs - 查看SkyWalking UI容器日志"
|
|||
|
|
echo " help - 显示帮助信息"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 部署功能
|
|||
|
|
deploy_skywalking_ui() {
|
|||
|
|
# 检查日志目录是否存在,不存在则创建
|
|||
|
|
if [ ! -d "$LOGS_DIR" ]; then
|
|||
|
|
echo "创建日志目录: $LOGS_DIR"
|
|||
|
|
mkdir -p "$LOGS_DIR"
|
|||
|
|
chmod 777 "$LOGS_DIR" # 确保容器内用户可访问
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查容器是否已存在,存在则停止并删除
|
|||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
|||
|
|
echo "停止并删除现有容器: $CONTAINER_NAME"
|
|||
|
|
docker stop $CONTAINER_NAME
|
|||
|
|
docker rm $CONTAINER_NAME
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 启动SkyWalking UI容器
|
|||
|
|
echo "启动SkyWalking UI容器..."
|
|||
|
|
docker run -d --privileged --name $CONTAINER_NAME --restart always \
|
|||
|
|
-p $PORT:8080 \
|
|||
|
|
-v $LOGS_DIR:/skywalking/ui/logs \
|
|||
|
|
-e TZ=Asia/Shanghai \
|
|||
|
|
-e "SW_OAP_ADDRESS=http://$OAP_HOST:$OAP_PORT" \
|
|||
|
|
$IMAGE_NAME
|
|||
|
|
|
|||
|
|
# 检查容器启动状态
|
|||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then
|
|||
|
|
echo "SkyWalking UI容器启动成功!"
|
|||
|
|
echo "容器名称: $CONTAINER_NAME"
|
|||
|
|
echo "日志目录: $LOGS_DIR"
|
|||
|
|
echo "访问端口: $PORT"
|
|||
|
|
echo "关联OAP服务器: $OAP_HOST:$OAP_PORT"
|
|||
|
|
echo "访问地址: http://localhost:$PORT"
|
|||
|
|
else
|
|||
|
|
echo "SkyWalking UI容器启动失败,请检查日志获取详细信息。"
|
|||
|
|
docker logs $CONTAINER_NAME
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 删除功能
|
|||
|
|
remove_skywalking_ui() {
|
|||
|
|
# 检查容器是否存在
|
|||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
|||
|
|
echo "停止容器: $CONTAINER_NAME"
|
|||
|
|
docker stop $CONTAINER_NAME
|
|||
|
|
|
|||
|
|
echo "删除容器: $CONTAINER_NAME"
|
|||
|
|
docker rm $CONTAINER_NAME
|
|||
|
|
else
|
|||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查日志目录是否存在
|
|||
|
|
if [ -d "$LOGS_DIR" ]; then
|
|||
|
|
read -p "是否删除日志目录 $LOGS_DIR? (y/n) " confirm
|
|||
|
|
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
|||
|
|
echo "删除日志目录: $LOGS_DIR"
|
|||
|
|
rm -rf "$LOGS_DIR"
|
|||
|
|
else
|
|||
|
|
echo "保留日志目录: $LOGS_DIR"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo "日志目录 $LOGS_DIR 不存在"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 日志功能
|
|||
|
|
show_logs() {
|
|||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
|||
|
|
echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..."
|
|||
|
|
docker logs -f $CONTAINER_NAME
|
|||
|
|
else
|
|||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主逻辑
|
|||
|
|
if [ $# -ne 1 ]; then
|
|||
|
|
show_help
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
case "$1" in
|
|||
|
|
deploy)
|
|||
|
|
deploy_skywalking_ui
|
|||
|
|
;;
|
|||
|
|
remove)
|
|||
|
|
remove_skywalking_ui
|
|||
|
|
;;
|
|||
|
|
logs)
|
|||
|
|
show_logs
|
|||
|
|
;;
|
|||
|
|
help)
|
|||
|
|
show_help
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
echo "无效的操作类型: $1"
|
|||
|
|
show_help
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|