Skywalking微服務全鏈路監控部署
一、skywalking介紹:
Skywalking是一款國內開源的應用性能監控工具,支持對分布式系統的監控、跟蹤和診斷。
它提供了如下的主要功能特性:

Skywalking 技術架構

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

由於我這里是加入了一個微服務所以可以看到一些服務名稱字眼,請忽略哈
三、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
需要調用微服務接口才會有訪問數據;



如上幾個圖我們可以看到數據證明服務接入正常
四、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部署和使用到此就告一段落拉,如果喜歡我的博客請關注我哦!
