skywalking agent监控java服务

2023-11-12

一、前言

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服务后又要重新进行镜像的构造 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

skywalking agent监控java服务 的相关文章

  • spring加载一个或者多个properties配置文件方法

    在项目中有些参数需要经常修改 或者后期需要修改 比如IP 调用别人的接口地址 数据库地址及帐号密码等 那么我们就不能把这些参数写死在代码里 虽然也可以在代码里改 但是如果是不懂代码的运维人员去现场部署项目又怎么改你的代码 那我们最好把这些参

随机推荐

  • 关于Discuz X3.2如何设置邮箱验证的具体方法

    原文地址 兔子酱老师好久没发文章了的 是因为最近在学习和熟悉Discuz社区程序 这个PHP程序是一木主编推荐给我的 妹子我简单操作了几下 很是喜欢 这个程序目前的版本是X3 2 带有很多好玩的功能 听说这个程序早几年被腾讯收购了的 所以
  • 控制疫情蔓延嵌入式物联网能帮大忙

    联合国所订定之永续发展目标之一 便是针对防治传染病的蔓延做好准备 在新型冠状病毒 COVID 19 流行期间 防疫已成为当前最重要目标 科技在对抗传染病方面扮演重要角色 而物联网 IoT 相关技术正是我们重要的防疫武器 降低成本 自发自主性
  • matlab 求单/多元函数极值

    matlab 求单 多元函数极值 单元函数极值 平时如果手算的话 就会先求导数 再求驻点 最终代值算出极值 如果用matlab代码求的话 就可以减少很多不必要的计算 fun inline 0 5 x exp x 2 ezplot fun 0
  • java复习第7天---7.4---IO流---递归、文件过滤器

    java复习第7天 7 4 IO流 递归 文件过滤器 目录 文章目录 1 递归 1 1 递归概述和分类 2 过滤器 后记 内容 1 递归 1 1 递归概述和分类 递归 在方法内调用自己 递归分类 递归分为直接递归和间接递归 直接递归 方法内
  • python的gzip库解压某一路径下的所有.gz文件

    今天 做机器学习 解压数据集的时候 参考大佬咯咯哒鸭的文章想到的方法 代码如下 encoding utf 8 Author Mr Pan 学狂 finish time 2022 2 15 import sys import gzip imp
  • 入门级题解5. 最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 思路 找到最小的那个字串 aba或者aa 然后向两边发散 伪代码 for 1 s length 第一种情况 if s i s i 1 aa bb cc形式 第二种情况 if s i 1
  • layui跨域问题

    由于浏览器存在同源策略 所以如果 layui 里面含图标字体文件 所在的地址与你当前的页面地址不在同一个域下 即会出现图标跨域问题 所以要么你就把 layui 与网站放在同一服务器 要么就对 layui 所在的资源服务器的 Response
  • JavaWeb中文件上传与下载

    JavaWeb中文件上传与下载 一 文件上传 1 文件上传的应用 比如个人信息的管理 上传头像 比如商品信息的管理 上传商品的图片 这些都需要通过浏览器客户端将图片上传到服务器的磁盘上 文件上传原理 所谓的文件上传就是服务器端通过reque
  • idea中连接mysql插入成功数据 在navicat中刷新表格没有数据_数据分析之路——sql入门...

    1 基础知识点 数据库 按照数据结构来组织 存储和管理数据的仓库 是一个长期存储在计算机内的 有组织的 可共享的 统一管理的大量数据的集合 关系型数据库 采用关系模型来组织数据的数据库 其以行和列的形式存储数据 以便于用户理解 多张表 各表
  • 0xc000007b的解决办法(续)

    最后更新 2021 3 1 请大家首先确定已经按照原文的方法及步骤尝试过 但是还是没有解决问题再来看这篇文章 如果你还没有看过原文 请先看原文 http blog csdn net VBcom article details 6070705
  • 基于ZYNQ的掌上超声成像系统前端设计与实现

    http www doc88 com p 6631786569315 html
  • LeetCode刷题——排序(python语言)

    LeetCode刷题 排序 python语言 一 排序 顾名思义 排序就是将数组按照从小到大的顺序排列 广义的排序分为内部排序方法和外部排序方法 排序的方法有很多种 常用的冒泡 选择 插入 希尔 归并 快速 堆 计数 桶 基数排序 按照时间
  • 尝试将RxJava和Retrofit

    http www jianshu com p 2b0aeb6b6b61 安卓学习 记住3点 现在安卓发展的足够成熟 遇到的需求 别人也遇到了 遇到的bug别人遇见过了 不要想着走捷径 这些留下的人 不一定靠技术 也许靠脸皮 所以只管学习 快
  • [洛谷 P3376] 网络最大流

    题目链接 题目描述 如题 给出一个网络图 以及其源点和汇点 求出其网络最大流 输入格式 第一行包含四个正整数 n n n m m m s
  • Redis——zset类型详解

    概要 zset是有序集合 将zset中的members引入一个属性score 根据这个属性值来进行排序 其中members不可以重复 score可以重复 按照字典序排序 默认按照升序排序 有序集合中提供指定分数和元素范围查找 计算成员排名功
  • grep中加单引号与不加引号的区别

    今天写命令时本想查找最后带标点的句子 结果发现不带引号时无法识别 grep n exp grep n exp 貌似不加单引号无法达到我们想要的效果 上网搜了一下 有人说是因为引号的作用 其实这在shell变量中就有介绍 明显的是 这里单引号
  • 借力计算机视觉及深度学习,纽卡斯尔大学开发实时、自动化奶牛跛行检测系统

    本文首发自 HyperAI超神经微信公众号 内容一览 近期 纽卡斯尔大学联合费拉科学有限公司联合开发了一个针对多头奶牛的自动化 实时跛行检测系统 该系统能够按照跛行评分系统将奶牛进行分类 并且准确度高达 94 100 目前 该研究成果已发表
  • Spring Boot系列 - 3. SpringBoot项目学习汇总

    原文地址 https blog csdn net hemin1003 article details 53217489 网络上很多关于SpringBoot的资料和代码 但有一些根本运行不了 有些博主的代码还故意藏着掖着 一定要加他的微信才能
  • php 文件上传抓包,详解文件上传漏洞

    介绍 在现代互联网网站中 上传文件基本上是一种常见的功能 允许用户上传一些图片 视频以及其他类型的文件 如果网站出现文件上传漏洞 那么恶意用户就可以将可执行脚本程序上传到web服务器中 获得网站权限 进一步 gongji web服务器 当上
  • skywalking agent监控java服务

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