微服务集成SkyWalking
title: 微服务集成SkyWalking
date: 2019-11-24 09:59:21
categories:
- 微服务
tags: - SkyWalking
最近做的一个项目使用了Spring Cloud Alibaba,随着服务系统的增多,调用连也越来越复杂,好几天不碰,就有点忘了,所以想集成一个APM系统进来,没想到遇到很多坑,边学习边记录,最开始学习netflix那一套的时候,玩过zipkin,觉得界面有点丑。。。想到SkyWalking是国人写的,文档多点,就尝试了下。
架构
SkyWalking的架构图就不偷了,它主要分成4大模块,这些模块也是我们需要安装的。
Agent
(客户端收集器):使用 JavaAgent 做字节码植入,无侵入式的收集,并通过 HTTP 或者 gRPC 方式发送数据到 SkyWalking Collector。Oap
(服务端分析):链路数据收集器,对 agent 传过来的数据进行整合分析处理并落入相关的数据存储中。Storage
(存储): SkyWalking 的存储,Mysql、ES、H2存储介质进行数据存储。UI
:Web 可视化平台,用来展示落地的数据。
安装
使用官方的docker镜像部署,docker-compose文件
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.version: '3.3'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:6.4.3container_name: elasticsearchrestart: alwaysports:- 9201:9200- 9301:9300environment:discovery.type: single-nodeTZ: Asia/Shanghaiulimits:memlock:soft: -1hard: -1oap:image: apache/skywalking-oap-servercontainer_name: oapdepends_on:- elasticsearchlinks:- elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800environment:SW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: 10.0.12.4:9201TZ: Asia/Shanghaiui:image: apache/skywalking-uicontainer_name: uidepends_on:- oaplinks:- oaprestart: alwaysports:- 8480:8080environment:SW_OAP_ADRESS: 11.0.12.4:12800TZ: Asia/Shanghai
自己构建镜像
https://github.com/apache/skywalking/blob/master/docs/en/guides/How-to-build.md
下载源码,下载依赖的git
子模块
git clone https://github.com/apache/skywalking.git
git submodule init
git submodule update
编译
mvn clean package -Dmaven.test.skip=true
构建docker镜像
# cd到docker目录下
[root@hmaster docker]#
# 分别进入oap、ui目录
[root@hmaster docker]# ls
config docker-compose.yml d.yml oap README.md ui
# 将Dockerfile.oap改名为Dockerfile
[root@hmaster oap]# mv Dockerfile.oap Dockerfile
# 粘贴apache-skywalking-apm-bin.tar.gz到同一个上下文中
[root@hmaster oap]# cp ../../dist/apache-skywalking-apm-bin.tar.gz .
# 构建
[root@hmaster oap]# docker build -t skywalking/oap .
# ui 同理
查看下
[root@hmaster oap]# docker images | grep skywalking
skywalking/ui latest d7f95be7e9f1 23 minutes ago 803MB
skywalking/oap latest 53a8f7b758a2 35 minutes ago 869MB
docker-compose
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.version: '3.3'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:discovery.type: single-nodeTZ: Asia/Shanghaioap:image: skywalking/oapcontainer_name: oapdepends_on:- elasticsearchlinks:- elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800volumes:- ./config:/skywalking/config:roenvironment:TZ: Asia/Shanghaiui:image: skywalking/uicontainer_name: uidepends_on:- oaplinks:- oaprestart: alwaysports:- 8480:8080environment:collectorListOfServers: oap:12800TZ: Asia/Shanghai
官方编译好的版本:
es
version: '3.3'
services:elasticsearch:image: wutang/elasticsearch-shanghai-zone:6.3.2container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:cluster.name: elasticsearch
下载,解压
http://skywalking.apache.org/downloads/
[root@hmaster apache-skywalking-apm-bin]# ll
总用量 112
drwxrwxr-x 8 mysql www 4096 9月 9 02:14 agent
drwxr-xr-x 2 root root 4096 11月 23 10:10 bin
drwxr-xr-x 2 root root 4096 11月 23 10:45 config
-rwxrwxr-x 1 mysql www 28903 9月 9 02:04 LICENSE
drwxrwxr-x 3 mysql www 4096 11月 23 10:10 licenses
drwxr-xr-x 2 root root 4096 11月 23 10:18 logs
drwxr-xr-x 2 root root 4096 11月 23 10:23 mesh-buffer
-rwxrwxr-x 1 mysql www 31850 9月 9 02:04 NOTICE
drwxrwxr-x 2 mysql www 12288 9月 9 02:22 oap-libs
-rw-rw-r-- 1 mysql www 1978 9月 9 02:04 README.txt
drwxr-xr-x 3 root root 4096 11月 23 10:23 trace-buffer
drwxr-xr-x 2 root root 4096 11月 24 09:54 webapp
修改配置,进入config
文件夹,修改application.yml
,注释掉h2
,使用es
,按需修改。
storage:elasticsearch:nameSpace: ${SW_NAMESPACE:"CollectorDBCluster"}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9201}
# protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
# trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
# trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
# user: ${SW_ES_USER:""}
# password: ${SW_ES_PASSWORD:""}indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# # Those data TTL settings will override the same settings in core module.
# recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
# otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
# monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
# # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.htmlbulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requestsflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requestsconcurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
# metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
# segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
# h2:
# driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
# url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
# user: ${SW_STORAGE_H2_USER:sa}
# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
# mysql:
# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
Skywalking中默认使用的端口有8080
、11800
、12800
,如需修改,可以修改config
目录中的application.yml
和webapp
目录中的webapp.yml
。
进入bin目录中,执行命令./startup.sh
。
客户端Agent配置
服务端部署好了,需要在程序里部署客户端Agent
。
我们只需要把整个/agent
目录挂载到各个微服务中就差不多了。
[root@hmaster agent]# ls
activations bootstrap-plugins config logs optional-plugins plugins skywalking-agent.jar
Dockerfile
FROM java:8
# 将运行脚本加入到容器中
COPY startup.sh /shell/startup.sh
# 赋予运行权限
RUN chmod +x /shell/startup.sh
# 指定容器时区:东八区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 创建jar包目录
RUN mkdir jar
RUN mkdir agent
# 挂载 jar,agent目录
VOLUME ["/jar","/agent"]
# 进行运行脚本
CMD [ "sh","/shell/startup.sh" ]
startup.sh
i#!/bin/bash
server_name="business-config-service-0.0.1-SNAPSHOT"
kill -s 9 `ps -aux | grep $server_name | awk '{print $2}'`
# 启动,添加agent参数,skywalking-oap地址,服务名
java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=config-business -Dskywalking.collector.backend_service=10.0.12.4:11800 -jar jar/$server_name.jar
样例docker-compose
,将容器内的agent
目录挂载到skywalking
目录下的agent
目录
version: "3.5"
services:gateway:image: gatewaycontainer_name: gatewayvolumes:- /usr/local/docker/oo1/jars/gateway:/jar- /usr/local/apache-skywalking-apm-bin/agent:/agentports:- "8889:8889"
微服务集成SkyWalking相关推荐
- Alibaba微服务整合SkyWalking实现应用性能监控
1. 概述 SkyWalking是一个国产的开源框架,用于分布式系统应用程序的性能监控,专门为微服务.云原生架构和基于容器(Docker.K8s.Mesos)架构而设计,包括了分布式追踪.性能指标分析 ...
- 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南
今年年初,我们宣布了JBoss BPM Suite令人兴奋的示例项目,该项目围绕一个正在运行的在线Travel Agency项目展开. 最初是利用Web服务,后来我们在JBoss Fuse的帮助下迁移 ...
- seata的部署与微服务集成(包含多集群异地容灾配置)
seata的部署与微服务集成 一.部署Seata的tc-server 1.下载与安装 2.配置文件详细讲解 3.创建数据库表 4.启动 二.微服务集成seata 1.引入依赖 2.修改配置文件 3.启 ...
- 微服务集成——《微服务设计》读书笔记
一.理想的集成应该是什么样的? 1.避免破坏性修改 如果在一个微服务的响应中添加一个字段,服务的消费方不应该受到影响. 2.保证API的技术无关性 微服务之间的通信应该是与技术无关的. 3.使服务的消 ...
- 微服务集成cas_Spring Boot + Solr 全文检索微服务简易集成
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:JasonGofen 链接:https://www.jianshu.com/p/95869ade37b3 本文内容主要讲解Solr 7 ...
- SkyWalking服务端的搭建、微服务接入SkyWalking
文章目录 SkyWalking SkyWalking介绍 SkyWalking服务端部署 Skywalking接入微服务 linux windows SkyWalking接入多个微服务 基于Mysql ...
- 微服务集成OpenFeign(案例分析 -- 实例业务的模拟)
案例: 假设某电商平台日常订单业务中,为保证每一笔订单不会超卖,在创建订单前订单服务(order-service)首先去仓储服务(warehouse-service)检查对应商品 skuId(品类编号 ...
- 微服务集成cas_Spring Cloud Security集成CAS (单点登录)对微服务认证
一.前言 由于leader要求在搭好的spring cloud 框架中加入对微服务的认证包括单点登录认证,来确保系统的安全,所以研究了Spring Cloud Security这个组件.在前面搭好的d ...
- 微服务集成cas_Spring Cloud(四) Spring Cloud Security集成CAS (单点登录)对微服务认证...
一.前言 由于leader要求在搭好的spring cloud 框架中加入对微服务的认证包括单点登录认证,来确保系统的安全,所以研究了Spring Cloud Security这个组件.在前面搭好的d ...
最新文章
- 理解T-SQL: 存储过程
- 最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事...
- Linux下修改root密码以及找回root密码的方法
- 层和 native_React-Native与小程序的底层框架比较
- 转:shell awk
- C++局部变量和全局变量的初始化
- MyBatis-Plus_更新操作
- linux下编译安装ntfs,linux下编译安装ntfs
- c语言 socket 报文解析,C语言实现Socket简单通信
- Java Web学习总结(8)——使用Cookie进行会话管理
- ostringstream的使用方法
- 新题速看~2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦
- iF.svnadmin安装部署
- 基于单片机的数字钟设计
- 卡塔编程_量子卡塔教您如何在Q#中进行量子编程
- node服务端生成七牛token
- Android Platform 3.0 SDK和Eclipse ADT安装记录三
- Golang环境变量设置(二)--GOMODULEGOPROXY
- 解决THINKBOOK 14安装windows系统不识别固态硬盘的问题
- c语言输入字符串 48CT,2004年9月全国计算机等级考试二级C笔试试题含答案