当前位置: 首页 > news >正文

skywalking agent监控java服务

一、前言

skywalking agent可以监控的服务类型有多种,python、go、java、nodejs服务等都可以监控,现在通过java服务来演示skywalking agent的使用,并且是使用容器的方式实现

二、部署skywalking agent监控

需要注意,skywalking agent服务也是需要使用java服务的,所以需要使用跟java服务对应的版本,我这边java服务使用的是jdk11版本,所以skywalking agent也需要用支持java11的版本,在skywalking官网的下载页面中有说到images的下载

官网路径:Downloads | Apache SkyWalking

 image路径:https://hub.docker.com/r/apache/skywalking-java-agent

 

 现在通过容器的方式去调用skywalking agent监控java服务

编辑yaml配置

vi k8s-cs.yaml

apiVersion: apps/v1
kind: Deployment
metadata: labels:app: k8s-csname: k8s-csnamespace: k8s-cs
spec:replicas: 5progressDeadlineSeconds: 600minReadySeconds: 10strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdateselector:matchLabels:app: k8s-cstemplate:metadata:labels:app: k8s-csspec:volumes:     #使用临时挂载的方式创建存放skywalking-agent文件的目录- name: skywalking-agentemptyDir: {}initContainers:    #使用初始化容器的方式去启动skywalking-agent容器,在该容器执行完成后,就会启动后面指定的容器- name: skywalking-agent-containerimage: apache/skywalking-java-agent:8.7.0-alpine    #使用skywalkinag-agent镜像volumeMounts:- name: skywalking-agent   #挂载临时目录mountPath: /agent      #将临时目录挂载到agent目录command: ["/bin/sh"]   #执行命令args: ["-c","cp -R /skywalking/agent /agent/"]  #将容器中/skywalking/agent目录下的所有文件都拷贝到挂载的临时目录中,相当于skywalking-agent服务的所有文件都要拷贝走containers:    #配置java服务容器- name: k8s-csimage: harbor.apex.com/jdk/k8s-cs:jenkins-k8s-cs-217-02d8c7aimagePullPolicy: IfNotPresentports:- containerPort: 8761readinessProbe:httpGet:path: /port: 8761scheme: HTTPinitialDelaySeconds: 30periodSeconds: 10timeoutSeconds: 2successThreshold: 1failureThreshold: 2livenessProbe:tcpSocket:port: 8761initialDelaySeconds: 30periodSeconds: 10successThreshold: 1timeoutSeconds: 2failureThreshold: 2 env:                  #配置环境变量,以下变量在启动java服务的时候都需要使用- name: JAVA_TOOL_OPTIONS     #定义使用skywalking-agent服务的变量value: "-javaagent:/skywalking/agent/skywalking-agent.jar"- name: SW_AGENT_NAME    #定义skywalking-agent服务的名称value: "-DSW_AGENT_NAME=k8s-cs"- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES   #指定skywalking opa服务的地址value: "-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=10.1.60.115:11800"volumeMounts:            #挂载临时目录,因为上面使用此临时目录已经拷贝了skywalking-agent服务的文件,所以在java服务的容器中挂载然后使用就可以了- name: skywalking-agentmountPath: /skywalking   #将临时目录挂载到/skywalking目录下,容器没有该目录时会自动创建imagePullSecrets:- name: harbor-secretrestartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:name: k8s-csnamespace: k8s-cs
spec:selector:app: k8s-cstype: NodePortclusterIP:ports:- port: 8761targetPort: 8761nodePort: 30003protocol: TCP

以上就是容器化使用skywalking agent的方式,接下来再看一下dockerfile是如何在启动java服务时调用skywalking agent服务的,一般来说使用skywalking agent服务只需要用到上面yaml文件中的三个变量即可,即指定skywalking agent服务的jar包,定义服务的名称,指定skywalking oap服务的地址

cat dockerfile

FROM harbor.apex.com/base_image/jdk11_image:latest
ENV JVM_OPTS="-Xms512m -Xms512m"
ENV HEAP_DUMP_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/java_jar/log"
RUN mkdir -p /opt/java_jar/log
WORKDIR /opt/java_jar/
COPY ./target/*.jar ./
EXPOSE 8761
#在启动java服务时应用为skywalking agent定义的三个变量,另外两个是定义java服务的
ENTRYPOINT java ${JAVA_TOOL_OPTIONS} ${SW_AGENT_NAME} ${SW_AGENT_COLLECTOR_BACKEND_SERVICES} ${JVM_OPTS} ${HEAP_DUMP_OPTS} -jar *.jar

执行该yaml生成容器

查看skywalking web看是否有监控到该java服务

 

在额外的讲解一下,关于skywalking agent服务的问题,我们通过进入 skywalking agent的容器中了解

 可以看到容器中的/skywalking/anget目录下有多个skywalking agent服务的文件,其中skywalking-agent.jar是要在启动java服务时去调用的,但是不能单单只要该jar服务,不然会报错,需要把该目录下的所有文件都拷贝走,在启动该jar服务的时候,会调用到该目录下的其它文件

接下来再看一下java容器的变量

可以看到无论是dockerfile定义的环境变量,还是yaml定义的环境变量,都被应用到了java的容器中 ,再来看一下挂载的临时目录

可以看到也是正常挂载进来了

将java服务和skywalking agent服务分开来部署主要是为了,在有需求要升级skywalking agent的版本时,避免影响java服务的版本,如果两个服务部署到一起,在使用升级版本的skywalking agent服务后又要重新进行镜像的构造 

http://www.lryc.cn/news/152315.html

相关文章:

  • LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER
  • 【Unity-Cinemachine相机】Cinemachine Brain属性详解
  • 使用Python对数据的操作转换
  • MyBatis-Plus —— 初窥门径
  • 音频——I2S 标准模式(二)
  • Python语音识别处理详解
  • 【小吉送书—第一期】Kali Linux高级渗透测试
  • 服务器允许ssh登录root
  • 【微服务部署】三、Jenkins+Maven插件Jib一键打包部署SpringBoot应用Docker镜像步骤详解
  • Ansible学习笔记9
  • Ubuntu22.04安装Mongodb7.0
  • Oracle中序列删除的正确语句(oracle删除序列语句)
  • ChatGPT AI在线免费体验
  • CSS中如何实现文字渐变色效果(Text Gradient Color)?
  • 尚硅谷SpringMVC (1-4)
  • 独家首发!openEuler 主线集成 LuaJIT RISC-V JIT 技术
  • 在Mac 上安装flutter 遇到的问题
  • 一个月能做什么?成长感悟分享
  • 网络编程
  • ip route get ip地址 应用案例
  • Windows下Redis的安装和配置
  • 【sgTransfer】自定义组件:带有翻页、页码、分页器的穿梭框组件,支持大批量数据的穿梭显示。
  • 分布式爬虫与SOCKS5代理池的组合优势
  • 京东获得JD商品详情 API 接口文档(含请求代码)
  • linux开启端口
  • 聚合多个电商API接口平台
  • 4.2 实现基于栈的表达式求值计算器(难度4/10)
  • 持续性能优化:确保应用保持高性能
  • Jupyter installation Tutorial
  • css-定位position 理论