Skywalking微服务全链路监控部署

一、skywalking介绍:

Skywalking是一款国内开源的应用性能监控工具,支持对分布式系统的监控、跟踪和诊断。

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

skywalking监控mysql skywalking监控vm_数据

Skywalking 技术架构

skywalking监控mysql skywalking监控vm_mysql_02

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

skywalking监控mysql skywalking监控vm_mysql_03

由于我这里是加入了一个微服务所以可以看到一些服务名称字眼,请忽略哈


三、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

需要调用微服务接口才会有访问数据;

skywalking监控mysql skywalking监控vm_数据_04

skywalking监控mysql skywalking监控vm_mysql_05

skywalking监控mysql skywalking监控vm_数据_06

如上几个图我们可以看到数据证明服务接入正常


四、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的日志页可以看到收集的日志

skywalking监控mysql skywalking监控vm_skywalking监控mysql_07

END
关于Skywalking部署和使用到此就告一段落拉,如果喜欢我的博客请关注我哦!