java应用在线诊断工具bistoury在k8s环境使用

1,161次阅读
没有评论

共计 1566 个字符,预计需要花费 4 分钟才能阅读完成。

Bistoury  是去哪儿网开源的一个对应用透明,无侵入的 java 应用诊断工具,用于提升开发人员的诊断效率和能力。

Bistoury 的目标是一站式 java 应用诊断解决方案,让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、机器和系统属性等各个方面对应用进行诊断,提升开发人员诊断问题的效率和能力。

项目开源工程地址: https://github.com/qunarcorp/bistoury

此应用在使用过程中需要管理员手动添加应用信息,在项目服务比较少的情况下还可以手动维护。当应用实例规模 200+ 以上以及使用 k8s 的情况下这种维护就会变得很困难。

java 应用在线诊断工具 bistoury 在 k8s 环境使用

在 k8s 环境中 pod 的 ip 和 hostname 是动态变化的,传统的手动维护数据库信息已经是不可能了,这个时候需要开发人员去在应用中接入注册中心,然后 bistoury 可以从应用中心获取应用注册信息。

关于这个解决方案的一些资料参考: https://www.cnblogs.com/xiaoqi/p/Bistoury.html

受限于开发人员水平已经每一个公司项目开发进度的问题,比如公司有上百个应用,那么每一个应用的升级改造就变的很困难。

应开发人员需求需要,我使用 golang 开发了一个简单的 api 调用,在 pod 中动态注册实例信息到 bistoury 数据库中,以此来代替手动维护。

Bistory-tool 开源地址: https://github.com/typ431127/bistoury-tool

此工程使用技术栈: gin gorm

在 pod 启动过程中启动一个 shell 脚本, 脚本上报 pod 的主机名和 ip 信息, 然后将这些信息写入 bistoury 数据库中。当 pod 销毁时使用钩子触发注销接口,从数据库中删除此注册信息。

此方法非最优解决方案,推荐方法是改造 java 项目来集成注册中心。

k8s 停止钩子使用示例

imagePullPolicy: IfNotPresent
    lifecycle:
      preStop:
        exec:
          command:
          - /bin/sh
          - -c
          - kill -15 $(ps aux|grep java|grep -Ev 'grep|bistoury' |awk '{print $1}')
            ; /bistoury-start.sh del
    livenessProbe:

注册 API 调用

 curl --location --request POST "${BISTOURY_API}/api/app" \
    --header "Content-Type: application/json" \
    --data-raw "{\"code\": \"${jobname}\",
        \"Name\": \"${jobname}\",
        \"Group_code\": \"${jobname}\",
        \"ip\":\"$(hostname -i)\",
        \"port\":${port},
        \"logdir\":\"${logdir}\",
        \"hostname\": \"$(hostname)\"
    }"

变量说明

  • jobname 服务名
  • port java 程序端口号
  • logdir java 程序日志目录
  • hostname pod 内主机名

POST 方法注册实例,DELETE 方法注销

程序编译

cd cmd/bistoury-sync
go build

配置文件

[server]
host=0.0.0.0
port=8090

[mysql]
host=x.x.x.x:3306
user=bistoury
password=123456
db=bistoury

启动

./bistoury-sync

客户端注册

开发人员在需要调试的应用上面开启客户端脚本然后注册应用,可以搭配 pod 钩子也可以单独使用脚本去开启调试,每一个 pod 默认开启就会有应用内存 cpu 占用问题,所以我们使用的方案是需要的时候再去开启。

java 应用在线诊断工具 bistoury 在 k8s 环境使用

自动注册的应用

java 应用在线诊断工具 bistoury 在 k8s 环境使用
java 应用在线诊断工具 bistoury 在 k8s 环境使用
正文完
 0
ddn
版权声明:本站原创文章,由 ddn 2023-11-22发表,共计1566字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)