Elastic Meetup 广州交流会

活动medcl 发表了文章 • 0 个评论 • 1813 次浏览 • 2017-11-09 13:57 • 来自相关话题

Elastic Meetup 线下交流活动再次来到羊城广州,算是社区在广州的第二次线下聚会了,广州的小伙伴们,快快报名吧! 回顾去年的线下活动,可以点击这里:https://elasticsearch.cn/article/71​  

timg.jpeg

主办:

本次活动由 Elastic 与 网易游戏运维与基础架构部 联合举办。  

媒体:

本次活动由 IT大咖说 独家提供现场直播。  

时间:

2017.11.25​  下午2:00-5:00(1点半开始签到)  

地点:

广州市天河区科韵路16号广州信息港E栋网易大厦 一楼博学堂  

主题:

  1. 网易 - 杜鑫 - ELK在藏宝阁中的应用
  2. 酷狗 - 钟旺 - 基于ES的音乐搜索引擎 
  3. 阿里云 - 赵弘扬 - Elasticsearch在阿里云的实践分享
  4. 网易 - 林邦骏 - 网易ELK 系统综述
  5. 数说故事 - 吴文杰 - Data Warehouse with ElasticSearch in Datastory
  6. 闪电分享(5-10分钟,可现场报名) 

参会报名:

http://elasticsearch.mikecrm.com/O6o0yq3  

现场直播:

直播连接:http://www.itdks.com/eventlist/detail/1673

WechatIMG176.jpeg

现场交流微信群:

⚠️请注意:限广州本地同学,外地毋加,微信人数限制,仅供现场参会人员沟通使用,谢谢合作🙏🙏🙏

IMG_9506123.JPG

主题介绍:

ELK在藏宝阁中的应用 

内容介绍:

 1. 藏宝阁项目介绍  主要介绍一下藏宝阁项目,让不熟悉藏宝阁的听众有一个基本的了解,熟悉应用的背景。

  1. ELK在藏宝阁中的应用(概述)  大致简要的阐述一下ELK在藏宝阁中哪些地方发挥了什么样的作用。

  2. ELK在藏宝阁推荐系统中的应用(重点)  较为详细的剖析一下ELK在推荐系统中的发挥的作用,具备的优势。

分享嘉宾:

讲师照片.jpg

杜鑫,网易藏宝阁工作室资深开发工程师,目前主要从事藏宝阁推荐业务相关的研发工作。  

网易ELK 系统综述

内容介绍:

  从架构以及功能两个角度去阐述网易的 ELK 平台,介绍系统内部各个组件及其管理方式。进而以用户的视角介绍平台中包含的自动化服务等功能,从管理员的视角去讨论组件的配置管理、资源调度回收等问题。

分享嘉宾:

lin.jpg

林邦骏,网易 GDC产品组资深运维工程师,主要负责内部 ELK 产品的运维、功能开发等工作。  

基于ES的音乐搜索引擎

内容介绍:

1、酷狗音乐搜索引擎架构变迁

2、构建音乐搜索引擎经验之谈 

分享嘉宾:

zhong.jpg

钟旺,酷狗后台开发工程师,从事JAVA、ES相关的开发工作。  

Data Warehouse with ElasticSearch in Datastory

内容介绍:

ES最多使用的场景是搜索和日志分析,然而ES强大的实时索引查询、全文检索和聚合能力也能成为数据仓库与OLAP场景的强力支持。

本次分享将为大家带来数说故事如何借助ES和Hadoop生态在不同的数据场景下构建起数据仓库能力。

分享嘉宾:

wu.jpg

吴文杰 ,数说故事平台架构团队 高级工程师,负责数说故事百亿级数据的存储查询及内部基础平台建设。  

Elasticsearch在阿里云的实践分享

内容介绍

介绍阿里云Elastiserach服务的技术架构和Xpack相关功能,并分享在云上环境搭建ELK的实践案例。

分享嘉宾

zhao.jpg

赵弘扬,阿里巴巴搜索产品专家,负责阿里云搜索产品规划和开发。


  深圳也在筹备中,可以提前报名!:https://elasticsearch.cn/article/261  


关于 Elastic Meetup

Elastic Meetup 由 Elastic 中文社区定期举办的线下交流活动,主要围绕 Elastic 的开源产品(Elasticsearch、Logstash、Kibana 和 Beats)及周边技术,探讨在搜索、数据实时分析、日志分析、安全等领域的实践与应用。

 

关于 Elastic

a998ed2d2cf1e319a841178bbc796fb8.jpg

Elastic 通过构建软件,让用户能够实时地、大规模地将数据用于搜索、日志和分析场景。Elastic 创立于 2012 年,相继开发了开源的 Elastic Stack(Elasticsearch、Kibana、Beats 和 Logstash)、X-Pack(商业功能)和 Elastic Cloud(托管服务)。截至目前,累计下载量超过 1.5 亿。Benchmark Capital、Index Ventures 和 NEA 为 Elastic 提供了超过 1 亿美元资金作为支持,Elastic 共有 600 多名员工,分布在 30 个国家/地区。有关更多信息,请访问 http://elastic.co/cn 。  

关于网易游戏运维与基础架构部

运基LOGO(红底白字).png

网易游戏运维与基础架构部, 主要负责网易游戏产品的可靠性保障以及基础设施的开发和部署,旨在:

  1. 专注为产品全生命周期提供可靠性保障服务,依托于大数据为运维提供决策
  2. 通过智能监控提高问题发现和解决能力,以自动化驱动低成本的业务管理
  3. 打造混合云方案,站在游戏业务角度驱动的TCO优化和运维智能化

关于IT大咖说

 

IT大咖说LOGO(知识分享平台).jpg

IT大咖说,IT垂直领域的大咖知识分享平台,践行“开源是一种态度”,通过线上线下开放模式分享行业TOP大咖干货,技术大会在线直播点播,在线活动直播平台。http://www.itdks.com 。  

再次感谢网易游戏运维与基础架构部和IT大咖说的大力支持!

线下活动又来啦,长沙,武汉,广州,深圳的同学快来报名啊 📣

活动medcl 发表了文章 • 15 个评论 • 2917 次浏览 • 2017-09-08 14:21 • 来自相关话题

Elastic 线下活动又双叒叕来啦,🔥🔥🔥🔥,这次的活动日程是:
  • 1️⃣   长沙,2017.10.28
  • 2️⃣   武汉,2017.11.4
  • 3️⃣   广州,2017.11.25
  • 4️⃣   深圳,2017.12.16
  在这些城市的同学快快来报名,可以报名分享,也可以报名参会,更欢迎一起组织✌️。   干货交流,免费参加,不收费(一直都是)! 已有主题(欢迎报名分享):
  • Elastic - Medcl - Elastic Stack 6.0 新功能介绍
  • 基于爬虫和 Elasticsearch 快速构建站内搜索引擎
  • 芒果 TV - 刘波涛 - 芒果日志之旅
  • 尚德机构 - 白凡 - 高吞吐状况下斗鱼搜索引擎优化之路
  • 腾讯 - 姜国强- 基于 ES 的时序数据库服务
  • 中信银行信用卡中心 - 陈刚 - ES的容器化之路
  • 中投证券 - 尉晋洪 - ELK 在证券行业业务监控中的应用
  • 网易 - ELK 在藏宝阁中的应用
  • 网易 - 网易 ELK 系统综述
  • 数说故事 - 吴文杰 - ElasticSearch with OLAP in Datastory
  • 酷狗 - 钟旺 - 基于ES的音乐搜索引擎
  报名分享与场地赞助请加微信:medcl123 上半年往期回顾~ 对了,报名链接:http://elasticsearch.mikecrm.com/O6o0yq3   名额有限哦!

【线下活动】2017-06-25 杭州 Elastic Meetup日程安排

活动medcl 发表了文章 • 6 个评论 • 3068 次浏览 • 2017-06-19 10:11 • 来自相关话题

报名链接:http://elasticsearch.mikecrm.com/O6o0yq3    1.举办方 主办:Elastic 中文社区     协办:魔蝎科技
banner.jpg
独家直播:   IT大咖说
itdks.jpg
2. 时间地点  活动时间:2017年6月25日 13:30 - 18:00   活动地点:杭州市西湖区文一西路767号西溪国际商务中心E座1楼会议室 3. 主题 分享一:基于ElasticSearch构建搜索云服务
cc.jpg
演讲者简介: 陈超,七牛云技术总监,Spark Summit China 出品人, 专注于大规模分布式计算与机器学习领域。 主题简介: 介绍七牛基于 Elasticsearch 如何构建大规模搜索云服务的经验和思考。 分享二:采用Elasticsearch构建大规模通用搜索平台的经验分享
UNADJUSTEDNONRAW_thumb_2.jpg
  演讲者简介: 马华标 - 城破 蚂蚁金服中间件搜索负责人, 12年加入阿里巴巴任职于B2B中文站架构部、数据仓库架构组组长,14年加入蚂蚁金服担任中间件搜索负责人, 从事搜索方面的团队建设与产品研发工作。   主题简介: 介绍蚂蚁金服采用Elasticsearch构建大规模通用搜索平台的经验分享。   分享三:垂直搜索引擎系统架构
wuh.jpg
演讲者简介: 吴英昊  花名:丰坚 蚂蚁金服数据中间件技术专家,曾任职于当当网,担任搜索架构师(兼开发经理)职位,负责当当网的搜索后台的技术架构和技术团队的管理,包括搜索引擎架构,搜索排序和 Query 分析,后在一创业公司负责推荐和广告系统架构和算法相关工作。 目前在蚂蚁金服数据中间件搜索组技术专家。 主题简介:  主题 “垂直搜索引擎系统架构”,介绍如何采用 Elasticsearch 构建大规模通用搜索平台。会穿插一些关于ES在垂直搜索中的应用和优化方向。 分享四:Metricbeat 在容器监控方面的应用
feefad29cca3455472cbc8019a820252.jpg
演讲者简介: 曾勇(Medcl) Elastic 工程师与布道师 Elasticsearch 爱好者,2015年加入 Elastic,Elastic 中文社区的发起人,Elastic 公司在中国的首位员工。 主题简介: 使用 Docker 或者其他的容器方案来进行部署已经成为热门,今天的分享将介绍如何使用 Metricbeat 来收集和监控您的容器化部署环境,结合 Elasticsearch 和 Kibana 对容器的性能进行全方位的了解。

Elastic南京meetup分享征集中

资讯动态kenny_ye 发表了文章 • 3 个评论 • 1403 次浏览 • 2017-03-27 14:34 • 来自相关话题

南京meetup筹备中,有意提供分享的同学请将 1. 个人简介 2. 主题简介 3. 大概内容 发送到 kenny_ye@trendmicro.com.cn   征稿截止日期: 2017年5月7日   欢迎踊跃投稿!
南京meetup筹备中,有意提供分享的同学请将 1. 个人简介 2. 主题简介 3. 大概内容 发送到 kenny_ye@trendmicro.com.cn   征稿截止日期: 2017年5月7日   欢迎踊跃投稿!

Elastic 官方及社区国内活动日程安排

资讯动态medcl 发表了文章 • 11 个评论 • 5009 次浏览 • 2017-03-16 15:24 • 来自相关话题

Elastic-Heart-2.png
【线上活动】 在线直播 直播工具Zoom:https://elastic.zoom.us/j/522710614,房间号:522710614(密码进群索取)
  • 《Elastic{ON}17 Keynote 回顾》,QQ 群(190605846),2017-3-17 21:00 PM,回放
  • 《What's new in Elasticsearch 5》,QQ 群(190605846),2017-3-20 21:00 PM,回放
  • 《What's new in Logstash 5》,QQ 群(190605846),2017-3-21 21:00 PM,回放 
      【线下活动】  Workshop
  • Elastic Workshop,北京,2017-04-10【报名结束】
  • Elastic Workshop,上海,2017-04-17【报名结束】
  • Elastic Workshop,深圳,2017-04-20【报名结束】
  • Elastic Workshop,上海,2017-06-29【报名结束】
  • Elastic Workshop,广州,2017-07-04【报名结束】
  • Elastic Workshop,深圳,2017-07-06【报名结束】
  Meetup
  • Elastic Meetup Shanghai ,上海,2017.5.14, 【报名结束】【日程
  • Elastic Meetup Beijing ,北京,2017.5.21  【报名结束】【日程】【直播回放
  • Elastic Meetup Nanjing,南京,2017.6.10 【报名结束】【日程】【直播回放
  • Elastic Meetup Hangzhou,杭州,2017.6.25 【报名结束​】【日程】【直播回放
  • Elastic Meetup Changsha,长沙,2017.10.28 【报名链接】【日程
  • Elastic Meetup Wuhan,武汉,2017.11.4 【报名链接】【日程
  • Elastic Meetup Guangzhou,广州,2017.11.25 【报名链接】【日程】🔥🔥🔥🔥
  • Elastic Meetup Shenzhen,深圳,2017.12.16 【报名链接】🔥🔥🔥🔥
  【会议参展】 Elastic 今年继续赞助和支持各种开发者会议,欢迎届时来展台交流。
  • Gopher China,上海,2017.04.15-2017.04.16
  • OSC Shanghai ,上海,2017.5.13
  • The China-R Conf,北京,2017.5.19-2017.5.21
  • OSC Hangzhou,杭州,2017.6.24
  • ArchSummit Shenzhen,深圳,2017.7.7-2017.7.8
  • OSC Jinan,济南,2017.7.22
  • OSC Zhuhai,珠海,2017.8.27
  • RubyConf China,杭州,2017.9.16-17
  • OSC Chengdu, 成都,2017.9.23
  • OSC Chongqing,重庆,2017.9.24
  • ArchSummit Shanghai,2017.12.8-2017.12.9
  上面是暂时确定的活动,部分活动报名链接晚点放出来,请关注本页面。 欢迎各个不同的城市的同学一起帮忙举办线下活动。 各个城市的线下活动欢迎报名分享,大家多交流,话题无论大小。

使用 Elastic Stack 来监控和调优 Golang 应用程序

Beatsmedcl 发表了文章 • 0 个评论 • 4268 次浏览 • 2017-03-03 11:16 • 来自相关话题

Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。   Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。   Metricbeat 是一个专门用来获取服务器或应用服务内部运行指标数据的收集程序,也是 Golang 写的,部署包比较小才10M 左右,对目标服务器的部署环境也没有依赖,内存资源占用和 CPU 开销也较小,目前除了可以监控服务器本身的资源使用情况外,还支持常见的应用服务器和服务,目前支持列表如下:
  • Apache Module
  • Couchbase Module
  • Docker Module
  • HAProxy Module
  • kafka Module
  • MongoDB Module
  • MySQL Module
  • Nginx Module
  • PostgreSQL Module
  • Prometheus Module
  • Redis Module
  • System Module
  • ZooKeeper Module
当然,也有可能你的应用不在上述列表,没关系,Metricbeat 是可以扩展的,你可以很方便的实现一个模块,而本文接下来所用的 Golang Module 也就是我刚刚为 Metricbeat 添加的扩展模块,目前已经 merge 进入 Metricbeat 的 master 分支,预计会在 6.0 版本发布,想了解是如何扩展这个模块的可以查看 代码路径 和 PR地址。   上面的这些可能还不够吸引人,我们来看一下 Kibana 对 Metricbeat 使用 Golang 模块收集的数据进行的可视化分析吧:
df9c563e-f831-11e6-835c-183f3f9e5b94.png
  上面的图简单解读一下: 最上面一栏是 Golang Heap 的摘要信息,可以大致了解 Golang 的内存使用和 GC 情况,System 表示 Golang 程序从操作系统申请的内存,可以理解为进程所占的内存(注意不是进程对应的虚拟内存),Bytes allocated 表示 Heap 目前分配的内存,也就是 Golang 里面直接可使用的内存,GC limit 表示当 Golang 的 Heap 内存分配达到这个 limit 值之后就会开始执行 GC,这个值会随着每次 GC 而变化, GC cycles 则代表监控周期内的 GC 次数;   中间的三列分别是堆内存、进程内存和对象的统计情况;Heap Allocated 表示正在用和没有用但还未被回收的对象的大小;Heap Inuse 显然就是活跃的对象大小了;Heap Idle 表示已分配但空闲的内存; 底下两列是 GC 时间和 GC 次数的监控统计,CPUFraction 这个代表该进程 CPU 占用时间花在 GC 上面的百分比,值越大说明 GC 越频繁,浪费更多的时间在 GC 上面,上图虽然趋势陡峭,但是看范围在0.41%~0.52%之间,看起来还算可以,如果GC 比率占到个位数甚至更多比例,那肯定需要进一步优化程序了。   有了这些信息我们就能够知道该 Golang 的内存使用和分配情况和 GC 的执行情况,假如要分析是否有内存泄露,看内存使用和堆内存分配的趋势是否平稳就可以了,另外 GC_Limit 和 Byte Allocation 一直上升,那肯定就是有内存泄露了,结合历史信息还能对不同版本/提交对 Golang 的内存使用和 GC 影响进行分析。 接下来就要给大家介绍如何具体使用了,首先需要启用 Golang 的 expvar 服务,expvar(https://golang.org/pkg/expvar/) 是 Golang 提供的一个暴露内部变量或统计信息的标准包。 使用的方法很简单,只需要在 Golang 的程序引入该包即可,它会自动注册现有的 http 服务上,如下:
import _ "expvar"
如果 Golang 没有启动 http 服务,使用下面的方式启动一个即可,这里端口是 6060,如下:
func metricsHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=utf-8")

	first := true
	report := func(key string, value interface{}) {
		if !first {
			fmt.Fprintf(w, ",\n")
		}
		first = false
		if str, ok := value.(string); ok {
			fmt.Fprintf(w, "%q: %q", key, str)
		} else {
			fmt.Fprintf(w, "%q: %v", key, value)
		}
	}

	fmt.Fprintf(w, "{\n")
	expvar.Do(func(kv expvar.KeyValue) {
		report(kv.Key, kv.Value)
	})
	fmt.Fprintf(w, "\n}\n")
}

func main() {
   mux := http.NewServeMux()
   mux.HandleFunc("/debug/vars", metricsHandler)
   endpoint := http.ListenAndServe("localhost:6060", mux)
}
默认注册的访问路径是/debug/vars, 编译启动之后,就可以通过 http://localhost:6060/debug/vars  来访问 expvar 以 JSON 格式暴露出来的这些内部变量,默认提供了 Golang 的 runtime.Memstats 信息,也就是上面分析的数据源,当然你还可以注册自己的变量,这里暂时不提。   OK,现在我们的 Golang 程序已经启动了,并且通过 expvar 暴露出了运行时的内存使用情况,现在我们需要使用 Metricbeat 来获取这些信息并存进 Elasticsearch。   关于 Metricbeat 的安装其实很简单,下载对应平台的包解压(下载地址:https://www.elastic.co/downloads/beats/metricbeat ),启动 Metricbeat 前,修改配置文件:metricbeat.yml
metricbeat.modules:
  - module: golang
     metricsets: ["heap"]
     enabled: true
     period: 10s
     hosts: ["localhost:6060"]
     heap.path: "/debug/vars"
上面的参数启用了 Golang 监控模块,并且会10秒获取一次配置路径的返回内存数据,我们同样配置该配置文件,设置数据输出到本机的 Elasticsearch:
output.elasticsearch:
  hosts: ["localhost:9200"]
现在启动 Metricbeat:
./metricbeat -e -v
现在在 Elasticsearch 应该就有数据了,当然记得确保 Elasticsearch 和 Kibana 是可用状态,你可以在 Kibana 根据数据灵活自定义可视化,推荐使用 Timelion 来进行分析,当然为了方便也可以直接导入提供的样例仪表板,就是上面第一个图的效果。 关于如何导入样例仪表板请参照这个文档:https://www.elastic.co/guide/e ... .html    除了监控已经有的内存信息之外,如果你还有一些内部的业务指标想要暴露出来,也是可以的,通过 expvar 来做同样可以。一个简单的例子如下:
var inerInt int64 = 1024
pubInt := expvar.NewInt("your_metric_key")
pubInt.Set(inerInt)
pubInt.Add(2)
在 Metricbeat 内部也同样暴露了很多内部运行的信息,所以 Metricbeat 可以自己监控自己了。。。 首先,启动的时候带上参数设置pprof监控的地址,如下:
./metricbeat -httpprof="127.0.0.1:6060" -e -v
这样我们就能够通过 [url=http://127.0.0.1:6060/debug/vars]http://127.0.0.1:6060/debug/vars[/url] 访问到内部运行情况了,如下:
{
"output.events.acked": 1088,
"output.write.bytes": 1027455,
"output.write.errors": 0,
"output.messages.dropped": 0,
"output.elasticsearch.publishEvents.call.count": 24,
"output.elasticsearch.read.bytes": 12215,
"output.elasticsearch.read.errors": 0,
"output.elasticsearch.write.bytes": 1027455,
"output.elasticsearch.write.errors": 0,
"output.elasticsearch.events.acked": 1088,
"output.elasticsearch.events.not_acked": 0,
"output.kafka.events.acked": 0,
"output.kafka.events.not_acked": 0,
"output.kafka.publishEvents.call.count": 0,
"output.logstash.write.errors": 0,
"output.logstash.write.bytes": 0,
"output.logstash.events.acked": 0,
"output.logstash.events.not_acked": 0,
"output.logstash.publishEvents.call.count": 0,
"output.logstash.read.bytes": 0,
"output.logstash.read.errors": 0,
"output.redis.events.acked": 0,
"output.redis.events.not_acked": 0,
"output.redis.read.bytes": 0,
"output.redis.read.errors": 0,
"output.redis.write.bytes": 0,
"output.redis.write.errors": 0,
"beat.memstats.memory_total": 155721720,
"beat.memstats.memory_alloc": 3632728,
"beat.memstats.gc_next": 6052800,
"cmdline": ["./metricbeat","-httpprof=127.0.0.1:6060","-e","-v"],
"fetches": {"system-cpu": {"events": 4, "failures": 0, "success": 4}, "system-filesystem": {"events": 20, "failures": 0, "success": 4}, "system-fsstat": {"events": 4, "failures": 0, "success": 4}, "system-load": {"events": 4, "failures": 0, "success": 4}, "system-memory": {"events": 4, "failures": 0, "success": 4}, "system-network": {"events": 44, "failures": 0, "success": 4}, "system-process": {"events": 1008, "failures": 0, "success": 4}},
"libbeat.config.module.running": 0,
"libbeat.config.module.starts": 0,
"libbeat.config.module.stops": 0,
"libbeat.config.reloads": 0,
"memstats": {"Alloc":3637704,"TotalAlloc":155
... ...
比如,上面就能看到output模块Elasticsearch的处理情况,如 output.elasticsearch.events.acked 参数表示发送到 Elasticsearch Ack返回之后的消息。   现在我们要修改 Metricbeat 的配置文件,Golang 模块有两个 metricset,可以理解为两个监控的指标类型,我们现在需要加入一个新的 expvar 类型,这个即自定义的其他指标,相应配置文件修改如下:
- module: golang
  metricsets: ["heap","expvar"]
  enabled: true
  period: 1s
  hosts: ["localhost:6060"]
  heap.path: "/debug/vars"
  expvar:
    namespace: "metricbeat"
    path: "/debug/vars"
上面的一个参数 namespace 表示自定义指标的一个命令空间,主要是为了方便管理,这里是 Metricbeat 自身的信息,所以 namespace 就是 metricbeat。   重启 Metricbeat 应该就能收到新的数据了,我们前往 Kibana。   这里假设关注 output.elasticsearch.events.acked和 output.elasticsearch.events.not_acked这两个指标,我们在Kibana里面简单定义一个曲线图就能看到 Metricbeat 发往 Elasticsearch 消息的成功和失败趋势。 Timelion 表达式:
.es("metricbeat*",metric="max:golang.metricbeat.output.elasticsearch.events.acked").derivative().label("Elasticsearch Success"),.es("metricbeat*",metric="max:golang.metricbeat.output.elasticsearch.events.not_acked").derivative().label("Elasticsearch Failed")
效果如下:
Snip20170304_9.png
从上图可以看到,发往 Elasticsearch 的消息很稳定,没有出现丢消息的情况,同时关于 Metricbeat 的内存情况,我们打开导入的 Dashboard 查看:
Snip20170304_10.png
关于如何使用 Metricbeat 来监控 Golang 应用程序的内容基本上就差不多到这里了,上面介绍了如何基于 expvar 来监控 Golang 的内存情况和自定义业务监控指标,在结合 Elastic Stack 可以快速的进行分析,希望对大家有用。 最后,这个 Golang 模块目前还没 release,估计在 beats 6.0 发布,有兴趣尝鲜的可以自己下载源码打包。

欢迎参加Elastic的Meetup线下活动问卷调查

资讯动态medcl 发表了文章 • 0 个评论 • 1054 次浏览 • 2017-02-23 11:25 • 来自相关话题

问卷调查直达链接:https://www.surveymonkey.com/r/elastic-china17    同学们,乡亲们:     想要今年的Elastic线下活动来到您身边么,快参加我们的问卷调查吧,如果您的城市不在下拉列表,记得添加进去,问卷调查比较简单啦,大概只需要花费您几分钟时间,快来吧:https://www.surveymonkey.com/r/elastic-china17 。      另外Elastic也在寻找各个城市的演讲者、场地赞助、协办方、志愿者。如果您有项目用到了任何Elasticsearch、Kibana、Logstash或Beats,并且有兴趣分享您的经验故事(不管是5分钟还是50分钟)请让我们知道,我们非常愿意与我们的社区一起分享您的故事。不管是哪种参与方式都欢迎,请在问卷内留下联系方式或联系我:medcl123(添加注明来意)。

我们感谢您参与本次问卷调查!问题集中在您想参加的线下活动类型,调查结果将被用来使组织者更好地安排活动计划。本调查预计需要花费2 - 5分钟才能完成。我们将与所有参与调查的人分享任何有趣的发现。所有收集的信息将保持匿名。为了鼓励大家花费这一天中的几分钟时间,将随机抽取五个人赢得 $50 美元的亚马逊礼品卡和十五个人将赢得 Elastic Stack 特别版T恤。为了进行抽奖活动,我们会在调查结束时要求您提供电子邮件,但只会用它来让您知道如果您中奖了。

  除了这个问卷调查,我们在也同时更新了 Elastic 用户组的行为准则(Code of Conduct)。参加我们的活动意味着您同意我们的准则。完整的准则可以访问:https://www.elastic.co/community/codeofconduct。所有的细节可以这个链接页找到。如果您还要其他问题,也欢迎告知我们:) — 我们会一直在这里提供帮助!  :)  
timg.jpeg

Elasticsearch 安全加固 101

Elasticsearchmedcl 发表了文章 • 3 个评论 • 5584 次浏览 • 2017-01-13 13:03 • 来自相关话题

images.jpeg
 最近 MongoDB 的安全事件闹得沸沸扬扬,应该不少人都听说了吧,事情大概是,因为 MongoDB 默认的安全设置造成了数据外泄并且被黑客勒索才能找回数据,想了解的,这里有几个链接: http://www.jianshu.com/p/48d17a69e190 http://mt.sohu.com/20170107/n478047698.shtml​  http://bbs.tianya.cn/post-itinfo-503786-1.shtml​    安全从来不是等到出事才要注意的事情,可以说安全是第一重要的事情,不管你是公司的CTO、技术总监、运维总监、架构师还是一线工程师,都应该有安全意识,好了,废话不多说了,Elasticsearch 的用户现在越来越多了,有些已经成为公司的基础服务,所以数据的安全非常重要,今天主要给大家介绍 Elasticsearch 围绕安全方面的的几点使用事项:   下载安装        请使用正规渠道下载 Elasticsearch,首选官方网站,下载完成,记得要验证下载文件的 sha1值和官网下载的提供的sha1值进行对比,避免下载过程中被人拦截破坏文件,甚至注入恶意代码。 不要随便安装第三方的插件,插件有可能引入安全漏洞甚至本身自带后门,需谨慎使用。     链接君:https://www.elastic.co/downloads      使用最新的 Elasticsearch       请关注 Elastic 网站,及时更新升级 Elasticsearch 的最新版本,Elasticsearch 每次版本发布都会优化和改进一部分功能,尤其是安全漏洞的补丁,仔细阅读 Elasticsearch 的更新记录,Elasticsearch 的版本遵照 语义化版本 ,所以小版本间应该是能够无缝升级的,建议及时本地测试和线上更新,升级前,记得 snapshot 做好备份。     链接君:https://www.elastic.co/downloads     修改默认的 Elasticsearch 集群名称        Elasticsearch 默认的集群名称是 elasticsearch,请在生成环境上一定要修改成其他的名称,并且不同的环境和不同的集群要保证不相同,监控集群节点情况,如果有未知节点加入,一定要及时预警。     文档君:https://www.elastic.co/guide/e ... .name    不要暴露 Elasticsearch 在公网上         Elasticsearch 默认端口是9200,绑定的是本机127.0.0.1的这个 ip,这个默认参数其实很安全,但是有很多人想要绑定其他的 lan 口或者公网的 ip,可以修改相应参数,记住,修改有风险,如果确实需要将 Elasticsearch 暴露在公网环境,请修改特定的端口绑定IP,不要直接修改参数: network.host,而是要分别修改:http.port 来绑定 HTTP 协议9200 端口的 IP(RESTful 接口调用),修改:transport.tcp.port 对应的 TCP 9300 端口的 IP(集群内通信),如果你不需要 http 端口,你干脆禁用掉,另外还需要在 Elasticsearch 之上加上成熟的安全防护措施(注意是成熟的!),在这里提供几种方案:
  1. 9200的 HTTP 接口之上加上 Nginx 来提供 Http Basic-Auth 的基本的身份认证,辅助 SSL 证书进行传输层的加密,Nginx 进一步限制可接受 Verb 请求类型及可被操作的索引前缀。
  2. 使用 Elastic 的 X-Pack 插件,同样提供了 Http Basic-Auth 和 SSL 传输层的加密,X-Pack 还能提供内外 Elasticsearch 集群节点间的流量加密,避免旁路攻击。
       文档君:https://www.elastic.co/guide/e ... tings    禁用批量删除索引   Elasticsearch 支持通过_all(全部)和通配符(*)来批量删除索引,在生产环境,这个有点危险,你可以通过设置: action.destructive_requires_name: true 来禁用它。 安全使用动态脚本      Elasticsearch 的脚本很方便的可以对数据进行操作,不过如果你暂时没有用上,还请禁用它(Elasticsearch 在1.2.x 以后已经默认禁用了),如果你已经在使用动态脚本,比如 Groovy,它不是沙盒机制的脚本引擎,启用 inline 或 store 类型的groovy 有安全风险,请限制脚本的接触方,比如通过模板的方式来限制脚本的调用,只需要执行特定预先定义好的脚本,对调用参数进行过滤和参数值的检测,做好验证,同时各种日志都必须要保留好,方便进行日志分析,异常的调用和请求一定要有发现和预警机制。       Elasticsearch 默认启用了  Java Security Manager ,但还请正确配置其白名单。       使用 Groovy 或者JavaScript 等脚本的用户,尽快迁移到 Painless 脚本,Painless 更快更安全。       文档君:https://www.elastic.co/guide/e ... .html   给 Elasticsearch 服务器加固        服务器加固是一个必备流程,不管上面运行的是什么服务;      首先,请开启防火墙,请设置防火墙规则,只开启必备的端口,完成之后,使用扫描工具扫描服务器,检查端口开发情况;      如果可能,不要用密码的方法来远程登录服务器,使用公私钥的方式来 ssh 登录服务器,如果只能使用密码,请妥善保管好你的用户名和密码,禁用 root 用户,不用使用弱密码。      关注 Java 最新的漏洞,使用安全的 JVM 运行时。      服务器及时更新最新的软件,使用安全的 repo 软件源,绑定软件源的 host和 ip,避免 dns 污染造成的攻击,关注服务器软件漏洞,及时打上补丁。      收集系统日志和安装相应的入侵检测软件,及时发现服务器是否有异常行为。   不要以 root 身份运行 Elasticsearch     如果你的运维人员打算以 root 身份来运行某个服务,这个运维人员一定是一个不合格的运维人员,记住一定不要以 root 身份来运行 Elasticsearch,另外,要不和其他的服务公用相同的用户,然后还要保证该用户的权限要最小化。      范例君:
sudo -u es-user ES_JAVA_OPTS="-Xms1024m -Xmx1024m"  /opt/elasticsearch/bin/elasticsearc
  正确设置 Elasticsearch 的数据目录        请确保 Elasticsearch 的目录分配了合理的读写权限,避免使用共享文件系统,确保只有 elasticsearch 的启动用户才能访问,同理,日志目录也一样需要正确配置,避免泄露敏感信息。      文档君:https://www.elastic.co/guide/e ... tings   定期对 Elasticsearch 进行备份        使用 Elasticsearch 提供的备份还原机制,定期对 Elasticsearch 的数据进行快照备份,以备不时之需。      文档君:https://www.elastic.co/guide/e ... .html   加上监控和预警        Elasticsearch 提供了很好的默认参数,对参数方面还做了正确性检测,bootstrap 启动检查,不准确的参数,直接不允许 Elasticsearch 启动,以至于有很多人抱怨,怎么现在部署到线上默认就需要做这么多设置才能使用呢,是的,以前启动就默认绑定了所有的网卡,集群见自动发现和相连,现在需要手动绑定局域网网卡,默认只是绑定的本机127.0.0.1的 ip,对上线来说麻烦了一点,做了这些检查也就是为了保证数据安全,以前很多的公网都能直接访问的 Elasticsearch 实例,都是因为默认设置就绑定了公网 ip,但是这些还不够,作为用户,你还需要收集各种日志和系统监控信息,及时主动掌握服务健康和资源使用情况,发现异常情况要及时处理,这里提供一些方案:
  1. 使用开源的 Elastic Stack 收集这些日志,可以使用 Filebeat 收集日志,Metricbeat收集系统监控信息,存进 Elasticsearch,一旦发现异常的波动,使用 Watcher 来进行预警,通过邮件或者 webhook 调用短信、微信或者电话。
  2. 使用其他厂商的安全监控产品。
  3. 使用托管的 Elasticsearch 云的产品,如 Elastic Cloud等等。
是的,把安全这个事情考虑进去之后,很多事情都要比没考虑要变得更加复杂和麻烦,千里之堤毁于蚁穴,一个不起眼的忽视就有可能造成全部数据的丢失和泄露,出来混迟早是要还的,安全问题千万不能忽视。   以上几点建议举例针对 linux 平台,其他平台思路基本上一样,仅供参考,安全是一个包含很多方方面面的学科,抛砖引玉,希望大家有用。  最后,Elastic 非常关心我们的产品安全,如果您发现有任何安全方面的问题,还请在这里上报: https://www.elastic.co/community/security 企业用户需要 X-Pack 及 Elastic 官方技术支持,请访问下面的链接: https://www.elastic.co/cn/contact

对话 Kibana 之父:如果需要,你应该自己动手编写工具

资讯动态medcl 发表了文章 • 1 个评论 • 2165 次浏览 • 2017-01-11 11:45 • 来自相关话题

转载:http://www.infoq.com/cn/news/2 ... nToolElastic 中国开发者大会 2016上,ELK 正式宣布更名为“Elastic Stack”,Elastic公司称其开源项目累计已经有8000万次下载。Elastic Stack 最新版本为5.0,从此,Elastic公司会对Elasticsearch、Kibana、Logstash、Beats、X-Pack进行统一规划以同版本号码发布。会上,Kibana 的原作者 Rashid Khan 进行了题为《Kibana 5.0: The Window into the Elastic Stack》。 PPT下载:http://elasticsearch.cn/article/122 
IMG_4857.gif
早在2001年,Rashid 就接触了运维工作,他的第一份工作是在摩根大通集团做网络运维管理分析员。2012年,Rashid 在美国一家媒体公司担任架构工程师,并且研发了 Kibana 的初始版本,那时他的目的是专门设计界面以适配 Logstash,如今 Kibana 已经逐渐演变成了 Elasticsearch 的分析平台。运维出身的他是在怎样的情况下开始了 Kibana 开发,Kibana 走到今天经历了什么,将来 Kibana 的发展会是怎样的?InfoQ 对 Rashid 进行了采访,以下文章来自于采访稿件的整理。 作为运维人员,我亟须优化日志搜索 开始的时候做运维工作遇到很多问题,on call待命,甚至在凌晨2点被叫醒;这种工作状态让我感到很厌烦。往往,在日志中可以发现问题所在,但是需要花费好久时间才能找到。 于是,我寻找有哪些开源软件可以做基本的日志搜索,然后发现了Logstash和与之配合使用的Elasticsearch。经过测试,我发现Elasticsearch速度很快并且提供我所需要的功能;然后我就开始编写一套非常简单的interface作为补充展示,大概花费了我几天的时间。这就是第一版Kibana的诞生过程,当时是采用PHP编写的,功能是可以展示日志并配有搜索入口,目的是把这个工具可以交付给我的boss,使得他无需我的参与便可以使用这个interface。需要提一句的是,Elasticsearch 对于Web编程很友好,并且日志数据按照日期排列。 在全职投入 Kibana 为 Elastic 公司工作之前,我一直从事运维工作并且我非常喜欢运维工作。因为这段实践经验帮助我体会到了运维人的问题和困难,这让我知道了需要创造一个什么样的工具。我依然认为运维是一个非常有挑战的工作,让所有的东西都正常地运转起来。 编程吧,动手创造自己的工具 的确,我是运维人员,但是我还自己动手开发工具。这在美国越来越普遍了,因为大家意识到,如果你可以编写代码,你的工作会轻松很多,代码可以代替你进行重复工作。通过代码实现自动化是正确的途径,没有人愿意不停地做同样的事情。 编写Kibana是因为我当时没有发现一个适合我的工具,于是我决定自己动手。第一版Kibana是用PHP写的,第二版是用Ruby,第三版之后是用JavaScript。我不害怕学习心得语言,因为学语言并不难,Ruby或者JavaScript的语言掌握仅仅是简单的熟悉语法,并没有接触到实际项目中复杂的事情。而重写Kibana的工作也并不复杂,因为其实Elasticsearch做的工作最重。 “哪种编程语言最好?”说实话,其实这个问题的讨论对我而言并不重要。重要的是,为你的工作选择恰当的语言。PHP在我心中仍然有一席之地,我认为它依然是一个好的语言,可能很多人有异议,但是我认为它简单易上手、稳定变化慢,相关工具也很容易上手。Node.js相对来说,比较复杂;Node社区也意识到这个问题,并且正在改进。比如说,当时我选择了Ruby重写Kibana,是因为Logstash是用JRuby写的,Elasticsearch 使用Java写的(JRuby可以理解为Ruby可以跑在JVM里面)。当时想把 Kibana 的 Ruby那个版本是因为想放到Logstash中,但是没有成功。所以,接下来我们研发了Kibana 3 。 在开发Kibana之前,我用过Graphite,但是为什么依然不满足呢?首先,Graphite很棒,所有关于数字、指标、时间序列的事情。但是那个时候,我需要的是一个可以做日志搜索的东西,需要有一个Dashboard可以给出一个图片。我非常希望从日志中获得信息并且把它们和预定的指标绑定在一起,实际上这些幕后工作都是Elasticsearch做的,并且速度真的快很多。此外需要考虑到扩展性,Graphite对于它适合的大小还算可以,即使超过了极限,更多的数据对应着更多的CPU消耗;但是想扩展很多的话,就很困难了,这一点上Graphite还有很多可以提升的空间,Elastic Stack就可以很轻松地实现。 不过,我依然很喜欢Graphite,我也依然认为这是一个有需求的工具,并且它其实是可以和Elasticsearch、Kibana结合在一起使用的。Architecture dependent的问题困扰了很多人, 比如32bit和64bit两者之间,即便是传输一个文件也不能工作,这是一个非常可怕的事情。Graphite 解决了这个问题,并且界面很美,功能强大 。Kibana也解决了很多相似的问题, 尤其是加上了Elasticsearch的配合,解决了许多我在做运维工作时总是非常想做的工作。 从来没有犹豫过是否开源 12岁的时候就开始接触开源项目了,所以在写Kibana的时候从来没有犹豫过要不要把它开源。 开始的时候我们只是把需求写在纸上,然后一条条做。放到Github之后,看到下载量不断上升我们感到很吃惊。我们没有想到,原来这么多人都面临这同样的问题,没有想到大家对这样的一个开源项目如此需要。开源的目的就是为了能帮助人们,最初我也曾疑惑有可能根本没有人用;然后发现越来越多的人在讨论、使用它。现在Elastic Stack是一个开源整体,把个人的事业career放在服务其他人的开源项目上,并能收获到好的反馈,这让我们感到很开心、很欣慰。 当时的小愿望,现在的大公司 Kibana第一版存在仅仅几周。是因为我开始使用Ruby进行重写,这大概花费了两周的时间。因为Logstash使用Ruby写的(即便当时我并不会Ruby),而我的目的就是让Kibana适配Logstash和Elasticsearch,让三者在一起可以协作获得更多的信息。当时我的想法就是让三个工具可以无缝衔接起来好似一个工具一样,有趣的是,这仅仅是当时我自己的一个愿望,后来Elasticsearch的人联系我问要不要合并在成为同一家公司,我们才发现彼此的看法竟然不谋而合。
elastic-logo-H-full-color.jpg
我现在依然是on call的。在 Elastic 公司,我们有on call轮班制。其实这是与用户交流的机会,这是我们 Elastic 每一个开发者都非常珍视的机会。在对用户支持的过程中,我们可以更清晰地了解用户的需求和真实使用情况;还有一些其他方式,比如会议、沙龙、见面会等,任何可以帮助我们与社区连接的。在我看来,在用户发生问题时,你在他身边并且帮助修复问题:没有比这个更好的工作方式。所以,on call不是折磨,是机会。 Kibana的下一步:数据挖掘、角色报表 1、数据挖掘,精益求精 最开始在做日志分析的那个时候,坦率地讲,我并没有关联到了Data mining。因为那时只是想先把问题弄清楚。但是在把所有的问题都解决完(这些并不难,只是花时间而已),实现了最初我们想要的Kibana之后,运维的工作量就大大减少了。 一切都运转得很顺利之后,我们开始思考怎样能把事情做得越来越好,尽量少地产生问题。我们可以获得数据,并且发现了一些问题发生的规律:问题的发生节点,比如说往往半夜三点、发布新版本之后;问题的发生频率,哪些问题非常热门,我们需要把对应的工作放在CDN上;问题的优化处理,发生问题之后如何最快地回滚。机器学习很强有力,而且对于运维人员而言,越少的红色提示越幸福。但是目前我的考虑是,能做到提前预警就已经很棒了。 基于这些思考,我们认为需要开始进行数据挖掘的工作了,这样才把事情做得越来越好,才能更大程度地帮助公司用户。在五六年前,很少会有人想到运维团队可以给出商业业务的指导意见,但是现在这开始越来越普遍。 2、接下来,Dashboard不会只有public一种 此前Kibana的Dashboard是完全公开的,没有角色区分。我知道一些其他的工具提供了包边权限区分的功能。最初的时候,只是想保持事情的简单化,Kibana并没有考虑到把Dashboard做成基于角色的,我们考虑更多的是产品易用性、功能,而没有打算触及安全模块。对于我们自己而言,这并不是过去那些年优先级第一的事项。最开始Kibana的主要矛盾是怎样把内容展现出来,打造Elasticsearch的良好用户界面,所以那个时候是界面是对所有用户可见的。而权限的控制我们是在Elasticsearch上面实现的,搜索、索引、集群操作添加是在Elasticsearch,也就是说我们首先Elasticsearch中实现数据层的安全。 接下来,我们考虑怎样把安全性延展到Kibana中,对不同角色进行区分化的搜索展示。(此前,有一个插件可以满足在Kibana中进行 Elasticsearch 用户的控制。代码是开源的,任何公司都可以编写自己的安全模块,并且我们也乐意帮助他们)在决定做一件事情之后我们就希望把一件事情做得非常好,而不是半途而废。 Kibana in Elastic Stack 5.0
Snip20170111_11.png
研发情况 研发出新功能的第一版本通常很快,但是需要不断的测试确保所有运转正常。Elastic Stack5.0 的所有功能大概花费了9个月的研发时间。在决策哪些功能需要研发时,我们有几周的考虑时间,还会参考社区中的反馈。然后我们还会给开发者一些自主空间,我们试着避免总是给某些人下发某些任务。我们认为最好主意并不来自与管理层或者经理,而是来自于那些与用户交流频繁的软件工程师,花费很多时间做客户支持的同事。会面通常是远程的,因为我们是个分布式的公司,公司成员分布于30多个国家,一共470多人。Kibana部分的研发、测试和运营人员一共有20多人。 如果有两个程序员所做的事情是一样的话,没有关系这不是重复劳动,反而可以让产品更加优化,两个人可以互相讨论加速功能研发;否则的话产品会被程序员打上过强的个人烙印,最终让产品交付给客户的是整个团队。 会一直并且只是配合Elasticsearch 是的,我们没有其他 datasource 的计划,因为我们大部分的使用case是要有时间序列的。 最开始融合在一起的是 Elasticsearch 和 Logstash,然后 Kibana 参与进来。在这个融合的过程中,遇到任何冲突或者改变,我们的评判标准都是怎样对用户而言更友好。举例说明,安全问题最佳的解决是在数据层,搜索非常占用内存,使用ES可以做很复杂的事情,在旧版本的 Kibana 中,可以使用 Elasticsearch 的 API,但是这拖缓了速度,并且用户可能会做一些危险的事情。在 Kibana 和 Elasticsearch 融合之后,我再也没有那样做了,对于一些重的内存需求工作不会在UI层(Kibana)而是会放到数据层(ES),用最少的内存,让尽可能多的计算脱离 JVM heap ,放入socket breaker,让我们管理更简洁干净并做到在UI可追踪。 Kibana的美学 Kibana最初的设计师只是我一个人,现在当然我们有了自己的很优秀的设计师,这是很被看重的部分,没有外包出去。因为我们需要和设计团队频繁地交流,不断地给予反馈,和工程团队。这是我们公司文化的一个重要部分。 你想一想这是运维人员需要终日面对的工具,没有人愿意一直看着丑的东西;此外,也希望Kibana可以让运维人员的boss们感到惊艳,我们希望可以帮助使用者产生非常美的工作。 写在最后 在采访结束时,InfoQ问Rashid是否可以给广大读者一些建议,Rashid想了想说:

如果你有一个想法,把它code出来,build起来。不要等其他人的开源代码,有可能你会等到,但是有可能你永远等不到。在你写出来之后,你没准会收获惊喜。

 
1.png
 

Day 14: Elasticsearch 5 入坑指南

Adventkennywu76 发表了文章 • 19 个评论 • 12172 次浏览 • 2016-12-15 13:16 • 来自相关话题

尝鲜 10月26日,Elasticsearch5.0.0 GA终于放出,携程ES Ops团队也在第一时间在DEV和UAT环境分别进行了2.4.0 至5.0.0的升级和测试。升级完成后,除了部分Query不向前兼容(主要是Filtered Query),需要在应用端做一些修改以外,未发现其他问题。通过监控系统看对比升级前后的主要系统指标,在同等索引量的情况下,CPU使用率有明显下降 ( 30% - 50%左右) ,相信性能方面5.0应该是有较大提升的。  在测试环境稳定运行了2周以后,我们决定选定一个生产集群进行升级,考验新版本在更为复杂的用户环境下的表现。 出于对业务影响最小化的考虑,用于日志分析的集群被圈定为升级目标。该集群也是携程十几个集群中规模最大的一个,共有120个数据结点运行于70台物理机上,总数据量接近1PB。 升级前需要做一些准备工作,下载官方的Migration Helper插件,检查集群设置和索引的兼容性。对于不兼容的配置项,MH会详尽列出,其中标注为红色部分为为升级前必须修改项。1.x版本创建的索引,是无法直接升级到5的,需要先在2.x集群里做一次reindex 。 MH提供了不兼容索引扫描功能,对于找到的不兼容索引,可以直接在UI上发起reindex操作,等待结束即可。 如果是用于业务搜索集群,数据可能比较重要,建议升级前做一个Snapshot,万一升级过程出现意外,可以回退版本从备份里快速恢复数据。我们的日志集群数据量极大,也没有对数据100%不丢的要求,因此升级前没有做Snapshot。 做完所有的准备工作后,预先通知所有用户集群升级的时间以及可能产生的影响,选定了周五深夜用户低峰期,开始正式升级工作。  首先通过Ansible将新版本批量部署到所有结点并统一配置,紧接着对原有集群做了Full Stop,校验所有的ES已经停下后,开始Full Start。整个过程比较顺利,所有结点正常启动,数据恢复完成后,集群重新回到正常服务状态。 周末两天运行,未发现有任何的异样,CPU利用率也降了不少,看起来很靠谱……直到周一 踏坑 周一早上,随着用户访问量高峰来临,马上浮现出一个诡异的现象: 索引速率遇到了瓶颈,数据开始在前置的消息队列(Kafka)里堆积。 从监控数据看,尽管所有的数据结点CPU消耗都比上周同期低,磁盘IO也很低,但索引速率却低了很多。反复对比查看升级前后各类监控指标后,终于发现一个可疑点,所有结点的网络流量比升级前高了好几倍!  在集群架构上,我们是单独架设了几台client node做为数据写入和分发的入口,现在这几个node的网络流量已经饱和,成为数据写入的瓶颈。一开始,怀疑是否2.4启用了tcp压缩,而5.0取消了,但翻查官方文档后发现transport.tcp.compress在2.4和5.0里默认都是关闭的! 这时候只有两个解决办法了,要么启用tcp压缩,要么扩容client node。 先考虑了一下tcp压缩的方案,快速扒了一下ES源码,在transport.TcpTransport这个类里,sendRequest和sendResponse两个方法会根据transport.tcp.compress设置来决定发送的消息是否要经过压缩,而在messageReceived方法则会读取消息头部的状态信息,探测消息是否经过压缩以及压缩的方法,而后决定是否需要解压,以及采用的解压方式。 这样看起来,ES是允许tcp压缩和不压缩的结点之间通讯的,那么只对client node启用压缩应该就可以了。测试环境测试过后,验证了想法的可行性。于是对生产的client node开启tcp压缩,同时在数据发送端(hangout的ES output)也启用tcp压缩,重启client node后入口网络流量降到和之前2.4差不多的程度,问题得到规避。 针对这个问题在Github上提交了issue https://github.com/elastic/ela ... 21612, 但未得到官方合理的解释。 解决好这个问题,另外一个问题来了,很多执行大量历史数据搜索的用户反映出不了结果。 从监控数据看,这类查询的搜索耗时非常久,直到网关300秒超时(查询api前置的nginx代理)。我们之前对集群设置过Global Search timeout为60s,用来保护集群资源过多被超高代价的查询消耗,在2.4版本是有效果的,现在看来不起作用了。手动测试了一下,这个参数果然失效! 于是向官方报告了第2个问题:https://github.com/elastic/ela ... 21595 。 这个问题很快被官方确认为Bug,修复也很快加入到了5.0.2。 为了规避这个问题,我们只好临时修改了一下Kibana以及第三方API访问要经过的nginx proxy,默认为所有的search request加入一个超时选项。此后,问题有一些缓解,但仍然发现用户查询大范围历史数据时,部分用于存储历史数据的结点响应很慢。 我们的集群是做了冷热分离的结构的,热节点主要承担写入和存放过去24小时数据,冷结点没有写入,查询频率也低,所以为了最大化利用硬件资源,一台物理机上跑了3个实例,这样一台128GB内存的机器可以存放下近30TB的索引。查看冷结点的监控数据,看到用户查询期间磁盘的read IO非常高,直接将磁盘IO Util%撑到100%,并且可持续数小时,同时search thread pool有大量的active thread处于无法完成状态,search queue不断攀升直至饱和、开始reject。 表象上看search thread似乎一直在尝试从磁盘大量读取数据,一次search甚至可以持续几十分钟至一个小时,耗尽了所有的搜索线程,导致拒绝后续的搜索服务。 于是Github上报了第3个issue: https://github.com/elastic/ela ... 21611  这个问题找到解决办法之前,我们只能通过反复重启有问题的冷结点来缓解。 和官方讨论过程中,得知5.0在Lucene文件访问方式上有一个比较大的改动,2.4使用mmapfs读取索引文件的部分,而5.0以后改为用mmapfs读取索引文件的全部。怀疑问题和这个变动有关,尝试将所有索引文件的设置改为NIOFS后,问题迎刃而解。 搜索性能一下回到了2.4时代,再也没出现搜索线程超长时间执行的问题。之后找时间复现了这个问题,并抓取了线程栈,看到长时间执行的搜索线程一直在做Global Ordinal的构造工作。 至于为何会这样,还不清楚。 从官方给出的信息看,底层索引文件的访问模式是没有变化的,仅仅是将文件读取方式全部改成了mmapfs,理论上应该性能更好,但是看起来在我们这种一台机器跑多个ES实例,所有分配的heap为系统缓存3倍的极端用例下,大范围的数据搜索可能造成过高的磁盘读IO,集群性能指数级下降。 以上问题前后耗了4天才完全规避掉,支持团队连续熬夜后集群总算回复到平稳状态。然而好景不长,运行一段时间以后,数据结点出现疑似内存泄漏现象。结点总数据没怎么增加、甚至还有减少的情况下,heap使用率一只呈攀升趋势,Old GC无法回收内存。这个问题对用户影响较小,通过监控我们可以及时发现内存即将用尽的结点,做一次重启很快就恢复了。 为排查根源,我们对一个有问题的结点做了dump,通过MAT工具分析,看到meta data相关的一个alias对象被实例化了有6600万次之多! 在Github上提交了第四个issue: https://github.com/elastic/ela ... 22013,不多久被确认为已知问题https://github.com/elastic/ela ... 21284 ,在5.0.1已经修复。 最后还存在一个master node内存泄漏的问题,这个问题在2.4.0时代就存在了,升级到5.0.0以后依然没有修复。由于我们的master node和data node是分离的,所以这个问题比较容易通过监控发现,解决方式也很简单和迅速,重启master node即可,对用户完全无影响。之后不久,5.0.2版本正式发布,release notes里提到了对这个问题的修复 https://github.com/elastic/ela ... 21578 。 上周周末我们将集群rolling upgrade到了5.0.2,global search timeout失效和两个内存泄漏的问题从根源上解决掉了。 网络流量增大的问题依然存在,仍然需要通过启用client结点的transport.tcp.compress规避。 冷结点搜索性能的问题没看到有提及,估计没解决,安全起见,还是保持索引的文件系统为NIOFS。升级完成运行一段时间后,可以肯定,5.0.2已经比较稳定。 心得 升到5.0.2后,对于其中一组数据结点这两天特意加了点索引负载,通过监控数据将v5.0.2与2.4.0做实际运行环境的索引吞吐量对比。
2.4_.png
5.0_.png
  在近似的CPU使用率和load情况下,5.0.2能够支撑更大的吞吐量。另外5.0带来的Instant aggregation功能,对于跨多个索引的时序类型数据的聚合也可以有效Cache了,在使用Kibana的时候提速感觉非常明显。 升级过程虽然遇到很多波折,但由于集群架构上做了角色分离(client,master,data)和冷热分离,因而Bug引起的故障比较容易被限定在一个较小的范围而不至于影响所有的功能和所有的用户。 故障点定位更加容易,规避措施也更容易实施。 部分规避措施实施过程中甚至对用户是完全无影响的,比如: 重启内存泄漏的master node)。详尽的监控为问题的发现和诊断提供了有力的支持。 Elasticsearch是非常复杂的系统,官方的测试无法覆盖所有的用例场景和数据规模,一些极端的应用场景可能触发某个深藏的Bug或者缺陷而陷入困境。 因此对于稳定性要求极高的应用,最好还是采用经过长时间考验的版本,比如v2.4.2。