skywalking agent监控java服务

news2024/11/27 11:49:51

一、前言

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-cs
  name: k8s-cs
  namespace: k8s-cs
spec:
  replicas: 5
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: k8s-cs
  template:
    metadata:
      labels:
        app: k8s-cs
    spec:
      volumes:     #使用临时挂载的方式创建存放skywalking-agent文件的目录
      - name: skywalking-agent
        emptyDir: {}
      initContainers:    #使用初始化容器的方式去启动skywalking-agent容器,在该容器执行完成后,就会启动后面指定的容器
      - name: skywalking-agent-container
        image: 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-cs
        image: harbor.apex.com/jdk/k8s-cs:jenkins-k8s-cs-217-02d8c7a
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8761
        readinessProbe:
          httpGet:
            path: /
            port: 8761
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 2
          successThreshold: 1
          failureThreshold: 2
        livenessProbe:
          tcpSocket:
            port: 8761
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 2
          failureThreshold: 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-agent
          mountPath: /skywalking   #将临时目录挂载到/skywalking目录下,容器没有该目录时会自动创建
      imagePullSecrets:
      - name: harbor-secret
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: k8s-cs
  namespace: k8s-cs
spec:
  selector:
    app: k8s-cs
  type: NodePort
  clusterIP:
  ports:
    - port: 8761
      targetPort: 8761
      nodePort: 30003
      protocol: 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.coloradmin.cn/o/940531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高忆管理:什么叫满仓?

满仓是股市术语之一,指出资者将所有资金用于股票出资,即持有的股票数量到达最大值。满仓出资是一种高风险高回报的出资战略,存在着带来高收益的或许性,但也或许面对巨大的亏本风险。 从理财视点来看,满仓出资是不明智…

Leetcode适合新手吗?0基础怎么较短时间得到算法数据结构提升?揭秘大牛都在用的刷题工具!...

别再用leetcode无脑刷题了! 刷题不应该量化为“刷多少道题”,对于刷题来说,永远不是追求数量的堆叠。 你想,LeetCode 上的题难度不等,有简单、中等、困难。 刷100道简单题倒是快,一个星期保证完事&#xff…

具有优异导电性能且抑制了准饱和效应的1200V 4H-SiC沟槽MOSFET

标题:1200V 4H-SiC trench MOSFET with superior figure of merit and suppressed quasi-saturation effect 摘要 本文提出一种具有部分被埋层n区包围的p屏蔽区的优异性能(FoM)1200V 4H-SiC沟槽MOSFET。在准饱和(QS)状态下,埋层n区抑制由p屏蔽区形成的耗…

SharedPreference

Android中的SharedPreference是轻量级的数据存储方式,能够保存简单的数据类型。比如String、int、boolean值等。其内部是以XML结构保存在/data/data/包名/shared_prefs文件夹下,数据以键值对的形式保存。是线程安全的,但不是进程安全的。 1.…

electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错

用 electron 开发软件,在设置了 globalShortcut 快捷键后,在当前开发的软件上调用快捷键正常,但是当焦点不在当前软件时,在使用快捷键,好些时候会报错。大概率与系统快捷键产生冲突或者快键键控制的回调里获取的内容&a…

全新UI站长在线工具箱系统源码带后台开源版

该系统的全开源版本可供下载,并且支持暗黑模式。 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上传插件、添加增减删功能。 环…

行业追踪,2023-08-28

自动复盘 2023-08-28 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

LNMT与动静分离

目录 前言 一、简要思路 二、NGINX的配置参考 1、location 2、rewirte 三、动静分离配置(单机配置) 1、Tomcat配置 2、配置NGINX 3、安装mariadb 4、测试 Tomcat8080​编辑 Tomcat8081 访问不存在的页面 前言 LNMT(Linux Nginx MySQL Tom…

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞,与立即指示问题的物理层不同,黑客攻击尝试可能会被忽视并变得严重,直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量,以查明问题或潜在问题的根源。 什么…

CY3-DBCO活性荧光染料-星戈瑞

​欢迎来到星戈瑞荧光stargraydye!小编带您盘点: CY3-DBCO是一种活性荧光染料,它是由Cyanine3(CY3)荧光染料与DBCO(dibenzocyclooctyne)官能团共轭而成的化合物。 活性荧光染料通常是指具有特定…

Android RecyclerView 之 列表宫格布局的切换

前言 RecyclerView 的使用我就不再多说,接下来的几篇文章主要说一下 RecyclerView 的实用小功能,包括 列表宫格的切换,吸顶效果,多布局效果等,今天这篇文章就来实现一下列表宫格的切换,效果如下 一、数据来…

k8s的交付与部署

一 k8s的概念 1.1 k8s k8s是一个轻量级的,用于管理容器化应用和服务的平台。通过k8s能够进行应用的自动化部署和扩容缩容。 1.2 k8s核心部分 1.prod: 最小的部署单元;一组容器的集合;共享网络;生命周期是短暂的; …

ChatGPT在医疗领域可应用于改善与患者的沟通

注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 自从ChatGPT在2022年末对公众开放以来,OpenAI的这款生成式AI聊天机器人在医疗领域展示出了巨大潜力。它已经通过了美国医学执照考试&a…

3. 运行时数据区及程序计数器

3.1. 运行时数据区 3.1.1. 概述 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们…

Centos7更新glibc2.18

Centos7更新glibc2.18 查看glibc版本下载解压glibc2.18编译安装结果验证 查看glibc版本 # 查看glibc版本 ldd --version下载解压glibc2.18 参考: https://blog.csdn.net/qq_39295044/article/details/86685789 https://blog.csdn.net/myhes/article/details/106923039 # 下载…

安装配置mariadb

记录下安装配置mariadb的经历。 环境:ubuntu22 一、apt在线安装 apt代理配置 APT是Ubuntu系统中用于安装和升级软件包的工具,如果本地没有可用的软件包,APT将会连接到远程软件包服务器下载软件包。在某些情况下,用户需要将APT的…

UE5- socket客户端写法

# 实现目标 ue5 c 实现socket客户端,读取服务端数据,并进行解析 #实现步骤 {projectName}.Build.cs里增加 "WebSockets","JsonUtilities", "Json"配置信息,最终输出如下: using UnrealBuildTool;…

msvcr110.dll怎么安装?多种方法教你快速修复msvcr110.dll文件

最近很多小伙伴在咨询,msvcr110.dll怎么安装这个问题,其实要安装这个还是比较简单的,而且方法有很多种,每一种方法都有各种的优势,我们只要选择适合我们的一种方法就可以了。好了,下面我们一起来了解一下快…

微信小程序云开发-云存储文件ID转http

一、前言 云开发的云储存文件默认是以cloudID的形式读取的,但是这种读取方式只能在微信小程序或内嵌H5中使用。 所以如果需要在其他地方使用,例如浏览器或网站等其他端读取文件的时候,需要转换成普通的http链接。 目前官方提供有转换的接口…

智慧矿山2.0:煤矿智能化综合管理AI大数据监管平台建设方案设计

一、行业背景 能源与煤矿是我国国民经济的重要物质生产部门和支柱产业之一,同时也是一个安全事故多发的高危行业,施工阶段的现场管理对工程成本、进度、质量及安全等至关重要。煤矿智能化既是未来趋势,更是产业发展需求,建设智慧…