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部署和使用到此就告一段落拉,如果喜欢我的博客请关注我哦!