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

news/2024/10/19 2:47:46/
#!/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_FILEecho "Zipkin started with PID $(cat $ZIPKIN_PID_FILE)"
}# 停止 Zipkin 的命令 #####################################################
# 该函数用于停止运行中的 Zipkin 进程。
stop_zipkin() {# 检查 PID 文件是否存在,确保 Zipkin 进程正在运行if [ -f "$ZIPKIN_PID_FILE" ]; then# 读取 PID 文件中的进程 IDPID=$(cat $ZIPKIN_PID_FILE)# 检查该进程是否正在运行if ps -p $PID > /dev/null 2>&1; thenecho "Stopping Zipkin (PID: $PID)..."# 尝试正常停止进程kill $PIDsleep 5  # 等待 5 秒钟,确保进程有时间正常停止# 再次检查进程是否仍在运行if ps -p $PID > /dev/null 2>&1; thenecho "Failed to stop Zipkin. Force killing it..."# 如果进程未停止,则强制终止进程kill -9 $PIDfi# 删除 PID 文件,表示 Zipkin 已停止rm -f $ZIPKIN_PID_FILEecho "Zipkin stopped."elseecho "Zipkin is not running, but PID file exists. Cleaning up..."# 如果进程不存在但 PID 文件存在,清理无效的 PID 文件rm -f $ZIPKIN_PID_FILEfielseecho "No PID file found. Zipkin may not be running."fi
}# 检查 Zipkin 是否在运行 ##################################################
# 该函数用于检查 Zipkin 是否正在运行。
is_running() {# 检查 PID 文件是否存在if [ -f "$ZIPKIN_PID_FILE" ]; then# 读取 PID 文件中的进程 IDPID=$(cat $ZIPKIN_PID_FILE)# 检查该进程是否正在运行if ps -p $PID > /dev/null 2>&1; thenreturn 0  # 返回 0 表示进程正在运行elsereturn 1  # 返回 1 表示 PID 文件存在但进程不在运行fielsereturn 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,并提供连接信息。

2. 启动 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 文件。

4. 检查 Zipkin 是否在运行 (is_running 函数)

  • 该函数通过检查 PID 文件是否存在,并验证 PID 对应的进程是否在运行,来判断 Zipkin 是否正在运行。
  • 如果进程正在运行,返回 0;否则返回 1

5. 主逻辑

  • 主逻辑首先调用 is_running 函数,检查 Zipkin 是否在运行。
  • 如果 Zipkin 正在运行,先调用 stop_zipkin 函数停止它。
  • 最后调用 start_zipkin 函数启动 Zipkin

使用说明

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

    chmod +x zipkin_control.sh

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

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

    tail -f zipkin.log

总结

  • 该脚本自动处理 Zipkin 的启动和停止操作,并记录日志和进程信息。
  • 通过使用 PID 文件,可以确保脚本能正确识别并管理 Zipkin 进程。
  • 通过 -Duser.timezone 参数,设置了 Zipkin 的时区,确保日志输出符合指定时区。
  • 启动成功查看地址:http://127.0.0.1:9411/  服务器ip+ 默认端口9411
  • 查询启动情况 ps aux | grep zipkin


http://www.ppmy.cn/news/1540159.html

相关文章

Android Framework AMS(09)service组件分析-3(bindService和unbindService关键流程分析)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:上上一章节主要解读应用层service组件启动的2种方式startService和bindService,以及从APP层到AMS调用之间的打通。上一章节我们关注了s…

Linux——pod实验练习

练习: 创建一个deployment资源 名为test-nginx使用nginx:1.19.1版本镜像设置pod 标签为 appfrontend设置副本数量为3创建一个service 将上面的服务暴露给客户端访问基于nginx:1.19.1构建一个新的镜像。镜像名为mynginx:new_files base镜像为nginx:1.19.…

中标麒麟v5安装qt512.12开发软件

注意 需要联网操作 遇到问题1:yum提示没有可用软件包问题 终端执行如下命令 CentOS7将yum源更换为国内源保姆级教程 中标麒麟V7-yum源的更换(阿里云源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cento…

安卓13禁止锁屏 关闭锁屏 android13禁止锁屏 关闭锁屏

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 设置 =》安全 =》屏幕锁定 =》 无。 我们通过修改系统屏幕锁定配置,来达到设置屏幕不锁屏的配置。像网上好多文章都只写了在哪里改,改什么东西,但是实际上并未写明为什么要改那…

智慧园区能带来哪些便利?

所谓智慧园区,是指通过信息化手段,实现园区内各项业务的数字化和智能化管理。园区管理者可以利用智能化平台实时监控各项运营情况,如能源使用、安全监控和物流运输等,及时调整管理策略,提高运营效率。智慧园区利用大数…

内嵌服务器Netty Http Server

内嵌式服务器不需要我们单独部署,列如SpringBoot默认内嵌服务器Tomcat,它运行在服务内部。使用Netty 编写一个 Http 服务器的程序,类似SpringMvc处理http请求那样。举例:xxl-job项目的核心包没有SpringMvc的Controller层,客户端却…

【jvm】分配的栈内存越大越好吗

目录 1. 说明2. 线程数量与栈内存的关系3. 内存使用效率4.应用程序的特性5. JVM的配置参数6. 性能考虑 1. 说明 1.在java虚拟机(jvm)中,栈内存是用于存储线程的方法调用和局部变量等信息的内存区域。2.栈内存的大小配置,不是越大…

ELK:Elasticsearch、Logstash、Kibana Spring Cloud Sleuth和Spring Cloud Zipkin

〇、虚拟机中docker安装elasticsearch 、Kibana、Logstash elasticsearch导入中文分词器 Logstash修改es数据库ip及创建索引名配置 一、elasticsearch数据库的结构 和mysql作比较,mysql中的数据库的二维表相当于es数据库的index索引结构;mysql数据库的二…