可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking

对Skywalking有兴趣的同学参见:年轻人的第一个APM-Skywalking

之前在搭建Skywalking的时候发现,官方Skywalking 5.X并支持有鉴权的Elasticsearch.

而我司有其他需求已经购买了阿里云的Elasticsearch,咨询过阿里云技术支持后他们表示并不能去掉鉴权,所以只好自己想办法了.

又在Skywalking技术群问了一圈,有其他人也遇到过类似的问题,但是最后还是选择自建ES了.

实在不想自己再浪费精力去搭建ES了,还是觉得可以尝试一下别的方案.

然后咨询了一下wusheng大大之后,他说可以自己尝试换一个支持XPack鉴权的Client,应该没什么太大的问题.

于是就开始了"填坑"之旅.

首先是引入x-pack-transport支持

apm-collector/apm-collector-component/client-component/pom.xml


<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.java

加入PreBuiltXPackTransportClient的初始化


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有鉴权就传入,没有的话就不传,这样就达到鉴权和不鉴权两种需求的兼容了.

支持xpack的docker部署方案

完整原文链接:Skywalking-Dcoker for ES xpack 镜像



Dockerfile说明

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

拉取镜像(Pull Image):

docker pull liguobao/skywalking-docker:5.0.RC2.xpack

运行镜像(Run)for ES 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

环境变量(Environment Variables)

  • 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) --> collectorM
  • AGENT_GRPC_BIND_PORT:OS real network IP(binding required),for agent to uplink data(trace/metrics) to collector. agent--(gRPC)--> collector
  • AGENT_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.

与elasticsearch-shanghai-zone镜像配合使用请参考

后记

本来还打算把代码提给主仓库的,但是wusheng 大大说xpack客户端和Apache要求的授权有冲突,遂...

那就留着自己玩了.

拜...

可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking的更多相关文章

  1. 30分钟全方位了解阿里云Elasticsearch

    摘要:阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据搜 ...

  2. 30分钟全方位了解阿里云Elasticsearch(附公开课完整视频)

    摘要: 阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据 ...

  3. ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截

    2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞.阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析.现在,对于 ...

  4. Cloud Insight支持阿里云一键接入了,so what?

    前几天 Cloud Insight 上线了一个新功能,考虑到目前只作为公测,所以只是是悄悄地加了一个接入项,希望你看完这偏文章会有兴趣体验一下. 相信体验过的用户(目前还是个位数)第一感受应该是:这个 ...

  5. JFrog推出全球首个支持混合云架构,端到端的通用DevOps平台 ——JFrog Platform

            JFrog Platform,基于屡获殊荣的JFrog Artifactory制品仓库的独特能力,通过多合一的体验提供DevSecOps.CI / CD和软件分发的解决方案. 2020 ...

  6. 阿里云 elasticsearch 增删改查

    kibana 控制台 # 查询所有数据 GET /yixiurds_dev/_search { "query": { "match_all": { } } } ...

  7. 正式开放 | 阿里云 10 亿级镜像服务正式支持 Helm Charts,云原生交付再加速!

    作者 | 阿里巴巴高级开发工程师 谢于宁(予栖) 2018 年 6 月,Helm 正式加入了 CNCF 孵化项目: 2018 年 8 月,据 CNCF 的调研表明,有百分之六十八的开发者选择了 Hel ...

  8. Gartner首推机密计算:阿里云名列其中

    近日,全球信息技术研究机构Gartner发布了2019年云安全技术成熟度曲线报告(Gartner, Hype Cycle for Cloud Security, 2019, Jay Heiser, S ...

  9. 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1

    摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...

随机推荐

  1. 动画的分类:属性(几何)动画、内容(视频)动画:gpu vs cpu

    属性动画通过gpu根据属性来呈现: 内容动画通过cpu解码内容按照时间呈现给gpu: (或者gpu直接解码现实?)

  2. Cordova Android源代码分析系列一(项目总览和CordovaActivity分析)

    版权声明:本文为博主offbye西涛原创文章.未经博主同意不得转载. https://blog.csdn.net/offbye/article/details/31776833 PhoneGap/Co ...

  3. java 静态相关内容

    一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码 ...

  4. Python--BeautifulSoup库安装

    1.BeautifulSoup简介 BeautifulSoup库通过解析文档可以获取网页文档中所需的数据,方便用户从HTML或XHTML文档中提取数据,作为python的一个辅助工作,也是爬虫实践中的 ...

  5. 20165302 学习基础和C语言基础调查

    学习基础和C语言基础调查 ====== 一,技能学习经验体会 要问我有什么技能比大多数人强,这个我还真的不敢说,虽然我在很多方面都有自己的一些了解,比如乐器和绘画,但也都是一知半解,并没有在某一方面出 ...

  6. 【luogu P1373 小a和uim之大逃离】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...

  7. Gradle Goodness: Display Available Tasks

    To see which tasks are available for our build we can run Gradle with the command-line option -t or ...

  8. Struts2学习总结——文件上传与下载

    Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...

  9. 批量kill杀死某些会话session的PL/SQL

    原文:http://blog.itpub.net/9240380/viewspace-666622/ SQL> declare 2 v_sid v$session.sid%type; --定义如 ...

  10. C#设计模式 —— 单例模式

    嗯,这是本人的第一篇随笔,就从最简单的单例模式开始,一步一步地记录自己的成长. 单例模式是最常见的设计模式之一,在项目代码中几乎随处可见.这个设计模式的目的就是为了保证实例只能存在一个.单例模式往下还 ...