zipkin启动脚本并指定mysql数据存储

bash 复制代码
#!/bin/bash

# 配置部分 #############################################################

# Zipkin JAR 文件的名称
# 这里指定了 Zipkin 的可执行 JAR 文件,确保该文件在当前目录中可用。
ZIPKIN_JAR="zipkin-server-2.23.2-exec.jar"

# PID 文件的位置
# 该文件用于存储运行中 Zipkin 进程的 PID (Process ID)。用于后续检查进程是否在运行,或停止它。
ZIPKIN_PID_FILE="zipkin.pid"

# 日志文件的位置
# Zipkin 的日志输出将被重定向到此文件中。
ZIPKIN_LOG_FILE="zipkin.log"

# MySQL 配置 #############################################################

# Zipkin 的存储类型,指定为 MySQL
STORAGE_TYPE="mysql"

# MySQL 数据库的连接主机,使用阿里云的 MySQL RDS 地址
MYSQL_HOST="rm-xx.mysql.rds.aliyuncs.com"

# MySQL 数据库的用户名
MYSQL_USER="root"

# MySQL 数据库的密码
MYSQL_PASS="123456"

# MySQL 数据库的名称
MYSQL_DB="zipkin"

# 启动 Zipkin 的命令 #####################################################
# 指定时区 Asia/Shanghai 及使用 MySQL 存储
# 该函数用于启动 Zipkin,使用指定的存储设置 (MySQL) 和时区 (Asia/Shanghai)。
start_zipkin() {
    # 使用 nohup 命令后台启动 Zipkin,避免其受到终端关闭的影响。
    # -Duser.timezone=Asia/Shanghai 用于指定 Zipkin 进程的时区为中国标准时间 (UTC+8)。
    nohup java -Duser.timezone=Asia/Shanghai -jar $ZIPKIN_JAR \
      --STORAGE_TYPE=$STORAGE_TYPE \
      --MYSQL_HOST=$MYSQL_HOST \
      --MYSQL_USER=$MYSQL_USER \
      --MYSQL_PASS=$MYSQL_PASS \
      --MYSQL_DB=$MYSQL_DB \
      > $ZIPKIN_LOG_FILE 2>&1 &

    # 获取启动的进程 ID,并存入 PID 文件
    # 使用 `$!` 获取最后一个后台进程的 PID,并将其写入到 PID 文件中,以便后续使用。
    echo $! > $ZIPKIN_PID_FILE
    echo "Zipkin started with PID $(cat $ZIPKIN_PID_FILE)"
}

# 停止 Zipkin 的命令 #####################################################
# 该函数用于停止运行中的 Zipkin 进程。
stop_zipkin() {
    # 检查 PID 文件是否存在,确保 Zipkin 进程正在运行
    if [ -f "$ZIPKIN_PID_FILE" ]; then
        # 读取 PID 文件中的进程 ID
        PID=$(cat $ZIPKIN_PID_FILE)
        # 检查该进程是否正在运行
        if ps -p $PID > /dev/null 2>&1; then
            echo "Stopping Zipkin (PID: $PID)..."
            # 尝试正常停止进程
            kill $PID
            sleep 5  # 等待 5 秒钟,确保进程有时间正常停止
            # 再次检查进程是否仍在运行
            if ps -p $PID > /dev/null 2>&1; then
                echo "Failed to stop Zipkin. Force killing it..."
                # 如果进程未停止,则强制终止进程
                kill -9 $PID
            fi
            # 删除 PID 文件,表示 Zipkin 已停止
            rm -f $ZIPKIN_PID_FILE
            echo "Zipkin stopped."
        else
            echo "Zipkin is not running, but PID file exists. Cleaning up..."
            # 如果进程不存在但 PID 文件存在,清理无效的 PID 文件
            rm -f $ZIPKIN_PID_FILE
        fi
    else
        echo "No PID file found. Zipkin may not be running."
    fi
}

# 检查 Zipkin 是否在运行 ##################################################
# 该函数用于检查 Zipkin 是否正在运行。
is_running() {
    # 检查 PID 文件是否存在
    if [ -f "$ZIPKIN_PID_FILE" ]; then
        # 读取 PID 文件中的进程 ID
        PID=$(cat $ZIPKIN_PID_FILE)
        # 检查该进程是否正在运行
        if ps -p $PID > /dev/null 2>&1; then
            return 0  # 返回 0 表示进程正在运行
        else
            return 1  # 返回 1 表示 PID 文件存在但进程不在运行
        fi
    else
        return 1  # 返回 1 表示没有 PID 文件,认为 Zipkin 未运行
    fi
}

# 主逻辑 #################################################################
# 该部分是脚本的主逻辑,控制 Zipkin 的启动和停止操作。

# 首先检查 Zipkin 是否在运行
if is_running; then
    # 如果 Zipkin 正在运行,先停止它
    echo "Zipkin is already running. Stopping it first..."
    stop_zipkin
fi

# 启动 Zipkin
echo "Starting Zipkin..."
start_zipkin

脚本说明

1. 配置部分
  • ZIPKIN_JAR :指定 Zipkin 的可执行 JAR 文件,确保该文件在当前工作目录中存在。
  • ZIPKIN_PID_FILE :存储 Zipkin 进程的 PID,用于停止或检查进程是否在运行。
  • ZIPKIN_LOG_FILE :指定 Zipkin 运行日志的输出文件路径。
  • STORAGE_TYPEMYSQL_HOSTMYSQL_USERMYSQL_PASSMYSQL_DB :用于配置 Zipkin 的存储后端为 MySQL,并提供连接信息。
  1. 启动 Zipkin (start_zipkin 函数)
  • 该函数用于启动 Zipkin,并将其日志输出到指定的日志文件中,同时将进程的 PID 存储到 PID 文件中。
  • 通过 -Duser.timezone=Asia/Shanghai,指定了 Zipkin 运行的时区为 Asia/Shanghai(中国标准时间,UTC+8)。
  • 使用 nohup 命令确保 Zipkin 在后台运行,即使终端关闭也不会影响 Zipkin 的运行。
3. 停止 Zipkin (stop_zipkin 函数)
  • 该函数用于停止 Zipkin 进程。
  • 它首先检查 PID 文件是否存在,如果存在则读取 PID 并检查进程是否在运行。
  • 如果进程正在运行,首先尝试正常停止它。如果在 5 秒内未能停止进程,则使用 kill -9 强制终止进程。
  • 完成后,删除 PID 文件。
  1. 检查 Zipkin 是否在运行 (is_running 函数)
  • 该函数通过检查 PID 文件是否存在,并验证 PID 对应的进程是否在运行,来判断 Zipkin 是否正在运行。
  • 如果进程正在运行,返回 0;否则返回 1
  1. 主逻辑
  • 主逻辑首先调用 is_running 函数,检查 Zipkin 是否在运行。
  • 如果 Zipkin 正在运行,先调用 stop_zipkin 函数停止它。
  • 最后调用 start_zipkin 函数启动 Zipkin

使用说明

  1. 保存脚本

    将上面的脚本保存为 zipkin_control.sh,并赋予可执行权限:

    bash 复制代码
    chmod +x zipkin_control.sh
  2. 启动或重启 Zipkin

    运行脚本时,它会先检查 Zipkin 是否正在运行。如果正在运行,则停止它,然后重新启动。

bash 复制代码
./zipkin_control.sh
  1. 日志查看

    你可以通过查看 zipkin.log 文件来监控 Zipkin 的输出日志:

    bash 复制代码
    tail -f zipkin.log

总结

  • 该脚本自动处理 Zipkin 的启动和停止操作,并记录日志和进程信息。
  • 通过使用 PID 文件,可以确保脚本能正确识别并管理 Zipkin 进程。
  • 通过 -Duser.timezone 参数,设置了 Zipkin 的时区,确保日志输出符合指定时区。
  • 启动成功查看地址:http://127.0.0.1:9411/ 服务器ip+ 默认端口9411
  • 查询启动情况 ps aux | grep zipkin
相关推荐
W@Lucky1 个月前
谷粒商城篇章12--P326-P339--Sentinel/Sleuth+Zipkin服务链路追踪【分布式高级篇九】
分布式·sentinel·sleuth·链路追踪·zipkin·熔断降级限流
王彬泽2 个月前
【微服务】链路追踪 - Micrometer(day9)
微服务·分布式链路追踪·zipkin·micrometer
陌生人~4 个月前
006-Sleuth(Micrometer)+ZipKin分布式链路追踪
分布式·springcloud·zipkin·micrometer
马剑威(威哥爱编程)4 个月前
用Zipkin在分布式系统追踪收集和查看时间数据
java·分布式·java-ee·zipkin·威哥爱编程
csdnfanguyinheng5 个月前
链路追踪系列-01.mac m1 安装zipkin
zipkin
程序员爱中国6 个月前
Micrometer+ZipKin分布式链路追踪
分布式·springcloud·zipkin·micrometer
hello_zzw8 个月前
docker 搭建 zipkin
docker·zipkin
紫枫叶5208 个月前
SpringCloudAlibaba-整合sleuth和zipkin(六)
springcloud·sleuth·zipkin
技术路上的苦行僧10 个月前
SpringCloud(18)之Sleuth +Zipkin链路追踪
spring·spring cloud·分布式链路追踪·sleuth·zipkin