Files
geg-gas-doc/宝策/docker_skywalking-oap.sh

161 lines
4.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 定义变量
CONTAINER_NAME="skywalkingwalking-oap-server"
IMAGE_NAME="apache/skywalking-oap-server:9.4.0" # SkyWalking OAP 镜像及版本
DATA_DIR="/docker-data/skywalking/data" # 数据存储目录
LOGS_DIR="/docker-data/skywalking/logs" # 日志目录
PORT=12800 # OAP gRPC 端口
PORT1=11800 # OAP REST 端口
NETWORK_NAME="scm-net"
SW_IP="10.10.2.102" # 固定IP
ES_HOST="10.10.2.102" # 关联的Elasticsearch容器名称
ES_PORT=9200 # Elasticsearch端口
SW_STORAGE="elasticsearch7" # 存储类型对应ES 7.x版本
# 显示帮助信息
show_help() {
echo "使用方法: $0 [操作类型]"
echo "操作类型:"
echo " deploy - 部署并启动SkyWalking OAP Server容器"
echo " remove - 停止并删除SkyWalking OAP Server容器及数据/配置/日志目录"
echo " logs - 查看SkyWalking OAP Server容器日志"
echo " help - 显示帮助信息"
}
# 部署功能
deploy_skywalking() {
# 检查数据、配置、日志目录是否存在,不存在则创建
for dir in "$DATA_DIR" "$LOGS_DIR"; do
if [ ! -d "$dir" ]; then
echo "创建目录: $dir"
mkdir -p "$dir"
chmod 777 "$dir" # 确保容器内用户可访问
fi
done
# 检查容器是否已存在,存在则停止并删除
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "停止并删除现有容器: $CONTAINER_NAME"
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
fi
# 启动SkyWalking OAP Server容器
echo "启动SkyWalking OAP Server容器..."
docker run -d --privileged --name $CONTAINER_NAME --restart always \
-p $PORT:12800 -p $PORT1:11800 -p 1234:1234 \
-v $DATA_DIR:/skywalking/data \
-v $LOGS_DIR:/skywalking/logs \
-e TZ=Asia/Shanghai \
-e "SW_STORAGE=elasticsearch" \
-e "SW_STORAGE_ES_CLUSTER_NODES=$ES_HOST:$ES_PORT" \
-e "SW_ES_VERSION=7" \
-e "SW_STORAGE_ES_USE_HIGH_LEVEL_CLIENT=true" \
$IMAGE_NAME
# 检查容器启动状态
if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then
echo "SkyWalking OAP Server容器启动成功"
echo "容器名称: $CONTAINER_NAME"
echo "数据目录: $DATA_DIR"
echo "日志目录: $LOGS_DIR"
echo "gRPC端口: $PORT"
echo "REST端口: $PORT1"
echo "关联Elasticsearch: $ES_HOST:$ES_PORT"
echo "存储类型: $SW_STORAGE"
else
echo "SkyWalking OAP Server容器启动失败请检查日志获取详细信息。"
docker logs $CONTAINER_NAME
fi
}
# 删除功能
remove_skywalking() {
# 检查容器是否存在
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 "$DATA_DIR" ]; then
read -p "是否删除数据目录 $DATA_DIR? (y/n) " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "删除数据目录: $DATA_DIR"
rm -rf "$DATA_DIR"
else
echo "保留数据目录: $DATA_DIR"
fi
else
echo "数据目录 $DATA_DIR 不存在"
fi
# 检查配置目录是否存在
if [ -d "$CONFIG_DIR" ]; then
read -p "是否删除配置目录 $CONFIG_DIR? (y/n) " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "删除配置目录: $CONFIG_DIR"
rm -rf "$CONFIG_DIR"
else
echo "保留配置目录: $CONFIG_DIR"
fi
else
echo "配置目录 $CONFIG_DIR 不存在"
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
;;
remove)
remove_skywalking
;;
logs)
show_logs
;;
help)
show_help
;;
*)
echo "无效的操作类型: $1"
show_help
exit 1
;;
esac