对Skywalking有兴趣的同窗参见:年轻人的第一个APM-Skywalkingjava
以前在搭建Skywalking的时候发现,官方Skywalking 5.X并支持有鉴权的Elasticsearch.node
而我司有其余需求已经购买了阿里云的Elasticsearch,咨询过阿里云技术支持后他们表示并不能去掉鉴权,因此只好本身想办法了.git
又在Skywalking技术群问了一圈,有其余人也遇到过相似的问题,可是最后仍是选择自建ES了.github
实在不想本身再浪费精力去搭建ES了,仍是以为能够尝试一下别的方案.docker
而后咨询了一下wusheng大大以后,他说能够本身尝试换一个支持XPack鉴权的Client,应该没什么太大的问题.apache
因而就开始了"填坑"之旅.浏览器
apm-collector/apm-collector-component/client-component/pom.xmlelasticsearch
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>x-pack-transport</artifactId> <version>${elasticsearch.client.version}</version> </dependency> <repositories> <repository> <id>elasticsearch-releases</id> <url>https://artifacts.elastic.co/maven</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
接着在 ...in/java/org/apache/skywalking/apm/collector/client/elasticsearch/ElasticSearchClient.javamaven
加入PreBuiltXPackTransportClient的初始化ide
private final String securityUser; private PreBuiltXPackTransportClient initXPackClient() { Settings settings = Settings.builder() .put("cluster.name", clusterName) .put("xpack.security.transport.ssl.enabled", false) .put("xpack.security.user", securityUser) .put("client.transport.sniff", false).build(); return new PreBuiltXPackTransportClient(settings); } private PreBuiltTransportClient initClient() { Settings settings = Settings.builder() Settings settings = Settings.builder() .put("cluster.name", clusterName) .put("cluster.name", clusterName) .put("client.transport.sniff", clusterTransportSniffer) .put("client.transport.sniff", clusterTransportSniffer) .build(); .build(); return new PreBuiltTransportClient(settings); } // 新增 private final String securityUser; // 判断这个变量是否是null或者空字符串,若是是就默认初始化,不是则使用initXPackClient初始化 // 改一下initialize 方法 private final String securityUser; @Override public void initialize() throws ClientException { if (securityUser == null || "".equals(securityUser)) { client = initClient(); } else { client = initXPackClient(); }
而后还要把apm-collector/pom.xml的elasticsearch.client.version 版本改为5.3.3.
改完以后由于5.3.3和原来5.5.0有点不同,须要修改一下很几个地方的代码.
这时候建议直接使用IDEA build 一下,哪里报错改哪里就好.
主要都是 searchResponse.getHits().totalHits 改为searchResponse.getHits().totalHits()
神奇发现5.5.0版本的ES Client把5.3.3的searchResponse.getHits().totalHits() 方法改为了属性.
不经感慨都是人才啊...
别的一些基本都是引入 import org.elasticsearch.action.bulk.byscroll.BulkByScrollResponse;
所有代码在这里:liguobao/incubator-skywalking
完整改好的代码在liguobao/incubator-skywalking
同时配置的时候添加一下 securityUser参数,若是ES有鉴权就传入,没有的话就不传,这样就达到鉴权和不鉴权两种需求的兼容了.
完整原文连接:Skywalking-Dcoker for ES xpack 镜像
apache-skywalking-apm-incubating.tar.gz为支持ES X-Pack修改后打包出来的压缩包,此仓库没有这个文件的.
能够去QQ群:Apache SkyWalking交流群(392443393)群文件中下载apache-skywalking-apm-incubating-xpack.tar.gz
或者自行编译liguobao/incubator-skywalking/tree/5.x 此版本的源码.
编译步骤:
# Prepare git, JDK8 and maven3 git clone https://github.com/liguobao/incubator-skywalking.git cd incubator-skywalking/ git checkout 5.x #Switch to the tag by using git checkout [tagname] (Optional, switch if want to build a release from source codes) git submodule init git submodule update Run ./mvnw clean package -DskipTests #All packages are in /dist.(.tar.gz for Linux and .zip for Windows).
Docker 镜像名称:liguobao/skywalking-docker
docker pull liguobao/skywalking-docker:5.0.RC2.xpack
docker run -p 8080:8080 -p 10800:10800 -p 11800:11800 -p 12800:12800 -e ES_CLUSTER_NAME=elasticsearch -e ES_ADDRESSES=192.168.2.96:9300 -e SECURITY_USER='elastic:password' -d liguobao/skywalking-docker:5.0.RC2.xpack
http://localhost:8080
便可.-v /your/log/path:/apache-skywalking-apm-incubating/logs
ES_CLUSTER_NAME
,ES_ADDRESSES
:elasticsearch 地址和集群名称。注意:此处Elasticsearch地址中的端口务必是Elasticsearch TCP端口。SECURITY_USER
,SECURITY_USER
:elasticsearch 的帐号密码,使用X-Pack实现的,常见阿里云ES,格式为:'user:password'.此参数不传入或者传入'' ,默认使用没有受权的client.NAMING_BIND_HOST
,NAMING_BIND_PORT
:OS real network IP(binding required),for agent to find collector cluster.BIND_HOST
,REMOTE_BIND_PORT
:OS real network IP(binding required),for collector nodes communicate with each other in cluster. collectorN --(gRPC) --> collectorMAGENT_GRPC_BIND_PORT
:OS real network IP(binding required),for agent to uplink data(trace/metrics) to collector. agent--(gRPC)--> collectorAGENT_JETTY_BIND_HOST
,AGENT_JETTY_BIND_PORT
:OS real network IP(binding required), for agent to uplink data(trace/metrics) to collector through HTTP. agent--(HTTP)--> collector-UI_JETTY_BIND_HOST
,UI_JETTY_BIND_PORT
:Stay in 0.0.0.0
if UI starts up in default mode.Change it to OS real network IP(binding required), if deploy collector in different machine.
原本还打算把代码提给主仓库的,可是wusheng 大大说xpack客户端和Apache要求的受权有冲突,遂...
那就留着本身玩了.
拜...