可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking
可能是全网首个支持阿里云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) --> 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 in0.0.0.0if 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的更多相关文章
- 30分钟全方位了解阿里云Elasticsearch
摘要:阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据搜 ...
- 30分钟全方位了解阿里云Elasticsearch(附公开课完整视频)
摘要: 阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据 ...
- ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截
2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞.阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析.现在,对于 ...
- Cloud Insight支持阿里云一键接入了,so what?
前几天 Cloud Insight 上线了一个新功能,考虑到目前只作为公测,所以只是是悄悄地加了一个接入项,希望你看完这偏文章会有兴趣体验一下. 相信体验过的用户(目前还是个位数)第一感受应该是:这个 ...
- JFrog推出全球首个支持混合云架构,端到端的通用DevOps平台 ——JFrog Platform
JFrog Platform,基于屡获殊荣的JFrog Artifactory制品仓库的独特能力,通过多合一的体验提供DevSecOps.CI / CD和软件分发的解决方案. 2020 ...
- 阿里云 elasticsearch 增删改查
kibana 控制台 # 查询所有数据 GET /yixiurds_dev/_search { "query": { "match_all": { } } } ...
- 正式开放 | 阿里云 10 亿级镜像服务正式支持 Helm Charts,云原生交付再加速!
作者 | 阿里巴巴高级开发工程师 谢于宁(予栖) 2018 年 6 月,Helm 正式加入了 CNCF 孵化项目: 2018 年 8 月,据 CNCF 的调研表明,有百分之六十八的开发者选择了 Hel ...
- Gartner首推机密计算:阿里云名列其中
近日,全球信息技术研究机构Gartner发布了2019年云安全技术成熟度曲线报告(Gartner, Hype Cycle for Cloud Security, 2019, Jay Heiser, S ...
- 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...
随机推荐
- BZOJ1369:[Baltic2003]Gem(树形DP)
Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个 ...
- [19/04/15-星期一] 基于Socket(套接字)的TCP和UDP通讯的实现
一.TCP 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序, 简称服务器.一旦通讯建立,则客户端和 ...
- oracle数据库之用户管理
转载 Oracle创建用户.角色.授权.建表 一.oracle数据库的权限系统分为系统权限与对象权限: 系统权限( database system privilege )可以让用户执行特定的命令集 ...
- Jmeter服务器监控插件使用
Jmeter服务器监控插件使用 Jmeter-Plugins支持CPU.Memory.Swap.Disk和Network的监控,在测试过程中更加方便进行结果收集和统计分析. 一.准备工作: 1.下载J ...
- js如何将一个json数组对应放置到另一数组中去
需要将上面这个数组的每一个元素对应添加至下面的数组中 最后合成为这样的数组: 使用for循环,将第一个数组中的元素循环到第二个数组中
- volatile关键字到底做了什么?
话不多说,直接贴代码 class Singleton { private static volatile Singleton instance; private Singleton(){} //双重判 ...
- 苹果IPad客户端安装测试软件
背景: 公司在开发一个App应用,需要部署在苹果IPad上进行测试,但是我负责后端开发对安装及测试相关流程不了解.经过一番学习得出以下结论: 1. 首先申请一个苹果的开发账号(一千块左右),大约能注册 ...
- Java类和对象详解,以及相关知识点
了解类和对象前,简单提及面向对象程序设计.面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体.例如:一个人.一本书.一个学校或一台电脑等等.每个对象都有自己独特的标识.状态和行 ...
- Linux各个文件及其含义
树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像 ...
- WebGl 利用缓冲区对象画多个点
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...