Skywalking微服務全鏈路監控部署


Skywalking微服務全鏈路監控部署

一、skywalking介紹:

Skywalking是一款國內開源的應用性能監控工具,支持對分布式系統的監控、跟蹤和診斷。

它提供了如下的主要功能特性:

image-20210719164745324

Skywalking 技術架構

image-20210719164812312

Skywalking總體可以分為四部分:

1.Skywalking Agent:使用Javaagent做字節碼植入,無侵入式的收集,並通過HTTP或者gRPC方式發送數據到Skywalking Collector。

2. Skywalking Collector :鏈路數據收集器,對agent傳過來的數據進行整合分析處理並落入相關的數據存儲中。

3. Storage: Skywalking的存儲,時間更迭,sw已經開發迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H2、作為存儲介質進行數據存儲。

4. UI :Web可視化平台,用來展示落地的數據。


二、skywalking部署:

在部署skywalking前需要先部署jdk

服務端IP:192.168.1.18

1、下載skywalking軟件包官方地址https://archive.apache.org/dist/skywalking/8.6.0/

wget https://archive.apache.org/dist/skywalking/8.6.0/apache-skywalking-apm-es7-8.6.0.tar.gz

tar -xf apache-skywalking-apm-es7-8.6.0.tar.gz

mv apache-skywalking-apm-bin/ /usr/local/skywalking

2、修改配置:

cd /usr/local/skywalking/config

#由於這里使用mysql做存儲所以這里只配置mysql即可,其他保持默認,具體如下;
vim application.yml
storage:
  selector: mysql
  mysql:
    properties:
      jdbcUrl: jdbc:mysql://192.168.1.13:3306/skywalking
      dataSource.user: skywalking
      dataSource.password: skywalking@12345
      dataSource.cachePrepStmts: true
      dataSource.prepStmtCacheSize: 250
      dataSource.prepStmtCacheSqlLimit: 2048
      dataSource.useServerPrepStmts: true
    metadataQueryMaxSize: 5000
    maxSizeOfArrayColumn: 20
    numOfSearchableValuesPerTag: 2
    
#由於這里使用了mysql數據庫做存儲,需要下載一個java連接mysql驅動包放至oap-libs目錄下;
#這里已將mysql連接驅動下載好並傳至百度網盤:鏈接:https://pan.baidu.com/s/16b9nuBGMCEP90X6W_3i5MA 提取碼:44ec

3、創建數據庫:

create database skywalking charset=utf8mb4;

grant all on skywalking.* to skywalking@"%" identified by 'skywalking@12345';

#創建數據庫和用戶授權即可,skywalking會自動導入數據表

4、啟動skywalking服務:

cd /usr/local/skywalking/bin

[root@BACKUP bin]# ./startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

5、查看服務端口:

[root@BACKUP bin]# netstat -tnlp|grep -Ew "8080|11800|12800"
tcp6       0      0 :::8080                 :::*                    LISTEN      3460/java
tcp6       0      0 :::11800                :::*                    LISTEN      3444/java
tcp6       0      0 :::12800                :::*                    LISTEN      3444/java
#可以看到三個端口都起來了

#端口介紹:
8080端口:skywalking默認的web訪問端口;
11800端口:agent端上傳數據的連接端口;
12800端口:這里默認使用graphql方式訪問oap的數據收集端口,因此監聽的是12800端口;

#可以在webapp.yml配置文件中修改端口:vim /usr/local/skywalking/webapp/webapp.yml
server:
  port: 8080

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: 127.0.0.1:12800

瀏覽器訪問http://192.168.1.18:8080

image-20210719171836428

由於我這里是加入了一個微服務所以可以看到一些服務名稱字眼,請忽略哈


三、agent接入:

agent配置介紹:

# 解壓開skywalking的壓縮包,在agent/config文件夾中可以看到agent的配置文件,這里保持默認不做任何修改;
cat agent.config 具體配置介紹如下:

agent.namespace: 跨進程鏈路中的header,不同的namespace會導致跨進程的鏈路中斷

agent.service_name:一個服務(項目)的唯一標識,這個字段決定了在sw的UI上的關於service的展示名稱

agent.sample_n_per_3_secs: 客戶端采樣率,默認是-1代表全采樣

agent.authentication: 與collector進行通信的安全認證,需要同collector中配置相同

agent.ignore_suffix: 忽略特定請求后綴的trace

collecttor.backend_service: agent需要同collector進行數據傳輸的IP和端口

logging.level: agent記錄日志級別

編寫dockerfile:

這邊以k8s環境的spring boot微服務為例:

需要將agent目錄拷貝到Docker目錄,將agent端添加到docker鏡像中,然后啟動服務具體如下:

vim Dockerfile
FROM openjdk:8-jdk-alpine
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY client-center.jar /app.jar
COPY skywalking /skywalking
EXPOSE 18080
ENV JAVA_OPTS=" -Xms512m -Xmx512m -XX:CompressedClassSpaceSize=128m -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=client-center,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print "client-center-"$NF}'),collector.backend_service=192.168.1.18:11800 $JAVA_OPTS /app.jar

#collector.backend_service=192.168.1.18:11800 指定skywalking服務端地址和數據傳輸端口;

構建docker鏡像:

docker build -t client-center:latest .

啟動服務后打開瀏覽器訪問http://192.168.1.18:8080

需要調用微服務接口才會有訪問數據;

image-20210719172042085

image-20210719172101477

image-20210719172145292

如上幾個圖我們可以看到數據證明服務接入正常


四、skywalking8.5.0 客戶端日志收集配置

1、增加依賴,在pom.xml文件中添加如下:

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.5.0</version>
</dependency>

2、修改logback-spring.xml,增加以下配置,在微服務的日志包里面添加

<!-- skywalking日志收集 -->
<appender name="skywalking-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger %level - [%tid] %msg %n</pattern>
        </layout>
    </encoder>
</appender>

<!-- 原有基礎上加上這句 -->
<root level="info">
    <appender-ref ref="skywalking-log"/>
</root>

3、在agent/config/agent.config增加以下配置

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.1.18}    #skywalking服務器地址
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

*配置說明:

配置項 說明 默認值
plugin.toolkit.log.transmit_formatted 是否以格式化或未格式化的格式傳輸記錄的數據 true
plugin.toolkit.log.grpc.reporter.upstream_timeout 客戶端向上游發送數據時將超時多長時間。單位是秒 30
plugin.toolkit.log.grpc.reporter.server_port 指定要向其報告日志數據的grpc服務器的端口 11800
plugin.toolkit.log.grpc.reporter.server_host 指定要向其報告日志數據的grpc服務器的主機 127.0.0.1
plugin.toolkit.log.grpc.reporter.max_message_size 指定grpc客戶端要報告的日志數據的最大大小 10485760

4、重啟客戶端,在skywalking的日志頁可以看到收集的日志

END
關於Skywalking部署和使用到此就告一段落拉,如果喜歡我的博客請關注我哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM