0


Linux搭建Skywalking9.3

开始语

一位普通的程序员,慢慢在努力变强!

1.安装

skywalking官网访问👈
在这里插入图片描述

1.1 下载文件压缩包

  1. wget https://dlcdn.apache.org/skywalking/9.3.0/apache-skywalking-apm-9.3.0.tar.gz
  2. wget https://dlcdn.apache.org/skywalking/java-agent/8.14.0/apache-skywalking-java-agent-8.14.0.tgz

1.2 解压压缩包

  1. tar -xzvf apache-skywalking-apm-9.3.0.tar.gz
  2. tar -zxvf apache-skywalking-java-agent-8.14.0.tgz

1.3 修改web-ui启动端口

  1. # 找到webapp目录下的yml文件
  2. vim apache-skywalking-apm-bin/webapp/application.yml
  3. serverPort: ${SW_SERVER_PORT:-8686}# 修改这行,默认是8080

1.4 修改存储:我这里使用的是mysql

  1. # 找到config目录下对应的yml文件
  2. vim apache-skywalking-apm-bin/config/application.yml
  3. storage:
  4. selector: ${SW_STORAGE:mysql}# 默认是h2,将数据进行持久化。重启数据不丢失。 关于存储类选型,设置方式都差不多
  5. mysql:
  6. properties:
  7. jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/skywalking_data?rewriteBatchedStatements=true"}
  8. dataSource.user: ${SW_DATA_SOURCE_USER:root}
  9. dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}# 配置数据库

温馨提示:由于缺少mysql驱动,自行下载将驱动jar放置此目录下:/apache-skywalking-apm-bin/oap-libs
再去mysql中新增库:skywalking_data # 不然启动会报错!

maven下载jar链接请点击此处👈

1.4 执行文件:startup.sh

  1. ./startup.sh
  2. # 出现下面提示说明执行成功:
  3. SkyWalking OAP started successfully!
  4. SkyWalking Web Application started successfully!

1.5 访问展示

浏览器输入:ip:8686
在这里插入图片描述
上面是接入了两个服务!

  1. # 接入方法: java-ops-javaagent:/skywalking/skywalking-agent/skywalking-agent.jar # jar包位置-DSW_AGENT_NAME=dev::demo2 # 前面的代表分组,后面的是项目名称-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 数据接入点# 每个项目需要拷贝一份skywalking-agent.jar

温馨提示:如果您是jenkins-k8s集成,请查看此篇文章:jenkins自动化部署👈

2.SpringBoot集成

温馨提示:此处的接入重点是针对jenkins-k8s的方式进行部署

2.1 本地项目部署

在这里插入图片描述

2.2 jenkins项目部署

2.2.1 将skywalking-agent.jar打包成镜像

  1. vim Dockerfile
  2. # (方式一)注意Dockerfile文件放置skywalking-agent根目录FROM busybox:latest
  3. LABEL maintainer="tianyu"COPY.//usr/skywalking/agent/
  4. # (方式二[推荐])如果你不想将Dockerfile放置容器中,那么你的Dockerfile需要放置skywalking-agent父级目录下FROM busybox:latest
  5. LABEL maintainer="tianyu"COPY skywalking-agent/ /usr/skywalking/agent/
  6. # 开始制作镜像,版本最好是和你的jar一致
  7. docker build -t skywalking-agent:8.14.0 .# (此处是进入了容器内部)因为在容器中接入agentDockerfile没有关系,所以不需要将它也复制到容器内部,如下:
  8. root@demo3-75c8d69dfb-ff85z:/usr/skywalking/agent# ls
  9. Dockerfile(这个复制到容器内部中了) LICENSE NOTICE activations bootstrap-plugins config licenses logs optional-plugins optional-reporter-plugins plugins skywalking-agent.jar

2.2.2 开始编写Deployment.yaml文件

温馨提示:如果您使用的是jenkins-k8s的方式,则可以忽略次此步骤!
请查看此篇文章:jenkins自动化部署👈

  1. # 编写yml文件cat > demo-deployment.yaml <<EOF
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. namespace: test-apps
  6. name: demo3
  7. labels:
  8. app.kubernetes.io/name: demo3
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. name: demo3
  14. template:
  15. metadata:
  16. labels:
  17. name: demo3
  18. spec:
  19. # 构建初始化镜像 (通过初始化镜像的方式集成SkyWalking Agent)
  20. initContainers:
  21. - name: skywalking-agent
  22. imagePullPolicy: IfNotPresent
  23. image: skywalking-agent:8.14.0 # 2.2.1 构建的镜像
  24. command: ["sh"]
  25. args:
  26. ["-c","cp -R /usr/skywalking/agent/* /skywalking/agent",# 将文件copy到容器内部,下列-javaagent需要使用]
  27. volumeMounts:
  28. - mountPath: /skywalking/agent
  29. name: sw-agent
  30. containers:
  31. - name: demo3
  32. image: demo3:v43 # 通过docker build 进行构建镜像
  33. imagePullPolicy: IfNotPresent
  34. ports:
  35. - containerPort: 80
  36. name: "demo3"
  37. resources:
  38. requests:
  39. cpu: "100m"#CPU限制
  40. memory: "1024Mi"#内存限制
  41. env:
  42. - name: SPRING_PROFILES_ACTIVE
  43. value: "test"- name: SERVER_PORT
  44. value: "80"- name: SW_AGENT_NAME
  45. value: "dev::demo3"- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
  46. value: 124.222.177.150:11800 # ip:11800采集接口- name: JAVA_TOOL_OPTIONS
  47. value: "-javaagent:/usr/skywalking/agent/skywalking-agent.jar"# 容器内部的jar位置
  48. volumeMounts:
  49. - mountPath: /usr/skywalking/agent
  50. name: sw-agent
  51. volumes:
  52. - name: sw-agent
  53. emptyDir: {}---
  54. apiVersion: v1
  55. kind: Service
  56. metadata:
  57. namespace: test-apps
  58. name: demo3
  59. spec:
  60. selector:
  61. name: demo3
  62. ports:
  63. - name: demo3
  64. protocol: TCP
  65. port: 80
  66. targetPort: 80
  67. EOF
  68. # 开始部署yml文件
  69. kubectl apply -f demo-deployment.yaml

2.2.3 验证结果

在这里插入图片描述
k8s内部文件展示

2.3 集成日志采集

2.3.1 pom文件中添加依赖

  1. <!--start skywalking8.5集成-->
  2. <!--skywalking8.5日志集成-->
  3. <dependency>
  4. <groupId>org.apache.skywalking</groupId>
  5. <artifactId>apm-toolkit-logback-1.x</artifactId>
  6. <version>${skywalking.version}</version>
  7. </dependency>
  8. <!-- 该引用用于代码获取tranceId -->
  9. <dependency>
  10. <groupId>org.apache.skywalking</groupId>
  11. <artifactId>apm-toolkit-trace</artifactId>
  12. <version>${skywalking.version}</version>
  13. </dependency>
  14. <!--end skywalking8.5集成-->
  15. <!--xml.value解析表达式-->
  16. <dependency>
  17. <groupId>org.codehaus.janino</groupId>
  18. <artifactId>janino</artifactId>
  19. <version>3.0.6</version>
  20. </dependency>

2.3.2 生成两个xml日志文件

温馨提示:我分了两个文件进行配置,此处可以使用一个配置文件!

  1. #文件1:logback-spring.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <configuration>
  4. <include resource="logback-skywalking.xml"/> # 引入sky日志(也可以写在一个文件中)
  5. <property name="LOG_PATH" value="logs"/>
  6. <property name="MAX_FILE_SIZE" value="10MB"/>
  7. <property name="MAX_HISTORY" value="30"/>
  8. <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="demo"/>
  9. <springProperty scope="context" name="loglevel" source="logging.level.root" defaultValue="info"/>
  10. <springProperty scope="context" name="skyLogEnable" source="skywalking.log.enable" defaultValue="false"/> # 新增sky日志的开关,yml中配置
  11. <!-- 控制台日志样式 -->
  12. <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{[${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}]}-[${LOG_LEVEL_PATTERN:-%5p}]-[%-30.30logger{29}] : %m%n}"/>
  13. <!-- 文件日志样式 -->
  14. <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{[${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}]}-[${LOG_LEVEL_PATTERN:-%5p}]-[%-30.30logger{29}] : %m%n}"/>
  15. <!-- 控制台 -->
  16. <appender name="CONSOLE"class="ch.qos.logback.core.ConsoleAppender">
  17. <encoder>
  18. <pattern>${CONSOLE_LOG_PATTERN}</pattern>
  19. </encoder>
  20. </appender>
  21. <!-- 日志文件 -->
  22. <appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  23. <encoder>
  24. <pattern>${FILE_LOG_PATTERN}</pattern>
  25. </encoder>
  26. <!-- <file>${LOG_PATH}/ztproject.log</file> -->
  27. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  28. <fileNamePattern>${LOG_PATH}/${applicationName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  29. <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
  30. <maxHistory>${MAX_HISTORY}</maxHistory>
  31. <cleanHistoryOnStart>true</cleanHistoryOnStart>
  32. </rollingPolicy>
  33. </appender>
  34. <!-- 错误日志文件 我们在k8s环境下 没必要做错误日志文件 -->
  35. <!-- <appender name="ERROR_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  36. <encoder>
  37. <pattern>${FILE_LOG_PATTERN}</pattern>
  38. </encoder>
  39. <file>${LOG_PATH}/ztproject-error-error.log</file>
  40. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  41. <fileNamePattern>${LOG_PATH}/${applicationName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  42. <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
  43. <maxHistory>${MAX_HISTORY}</maxHistory>
  44. </rollingPolicy>
  45. <filterclass="ch.qos.logback.classic.filter.LevelFilter">
  46. <level>ERROR</level>
  47. <onMatch>ACCEPT</onMatch>
  48. <onMismatch>DENY</onMismatch>
  49. </filter>
  50. </appender> -->
  51. <!-- 异步写日志 -->
  52. <appender name="ASYNC_FILE"class="ch.qos.logback.classic.AsyncAppender">
  53. <discardingThreshold>0</discardingThreshold>
  54. <queueSize>1024</queueSize>
  55. <appender-ref ref ="FILE"/>
  56. </appender>
  57. <!-- <appender name="ASYNC_ERROR_FILE"class="ch.qos.logback.classic.AsyncAppender">
  58. <discardingThreshold>0</discardingThreshold>
  59. <queueSize>1024</queueSize>
  60. <appender-ref ref ="ERROR_FILE"/>
  61. </appender> -->
  62. <root level="INFO">
  63. <appender-ref ref="ASYNC_FILE"/>
  64. <if condition='${skyLogEnable}'> # js表达式
  65. <then>
  66. <appender-ref ref="SKY_WALKING_CONSOLE"/>
  67. <appender-ref ref="GRPC_LOG"/>
  68. </then>
  69. <else>
  70. <appender-ref ref="CONSOLE"/>
  71. </else>
  72. </if>
  73. </root>
  74. </configuration>
  75. #文件2:logback-skywalking.xml
  76. <?xml version="1.0" encoding="UTF-8"?>
  77. <included>
  78. <!--日志渲染-->
  79. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  80. <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  81. <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
  82. <!-- skywalking日志样式 -->
  83. <property name="SKY_WALKING_PATTERN" value="[%tid] ${SKY_WALKING_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39} %line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  84. <!-- skywalking控制台 -->
  85. <appender name="SKY_WALKING_CONSOLE"class="ch.qos.logback.core.ConsoleAppender">
  86. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  87. <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
  88. <pattern>${SKY_WALKING_PATTERN}</pattern>
  89. </layout>
  90. </encoder>
  91. </appender>
  92. <!--推送日志至管理后台-->
  93. <appender name="GRPC_LOG"class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
  94. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  95. <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  96. <pattern>%date [%file:%line]-%msg%n</pattern>
  97. </layout>
  98. </encoder>
  99. <filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
  100. <level>INFO</level>
  101. </filter>
  102. </appender>
  103. <!-- skywalking控制台 -->
  104. </included>

2.3.3 配置yml开关,启动日志,测试结果

  1. #application.yml开启日志追踪
  2. skywalking:
  3. log:
  4. enable: true # false是关闭,不配默认关闭

2.3.4 验证是否配置成功

温馨提示:项目自行定义接口,然后通过日志@Slf4j来记录日志!在这里插入图片描述
温馨提示:如果需要k8s或者docker部署skywalking方式的猿友们,在下方评论或者联系我,可以对其进行编写部署方案提供猿友们参考!

结束语

本章节完成了,各位正在努力的程序员们,如果你们觉得本文章对您有用的话,或者是你学到了一些东西,期待您用漂亮,帅气的小手点个赞+关注,支持一下猿仁!
持续更新中…

标签: linux java kubernetes

本文转载自: https://blog.csdn.net/qq_45518774/article/details/128798893
版权归原作者 猿仁 所有, 如有侵权,请联系我们删除。

“Linux搭建Skywalking9.3”的评论:

还没有评论