Day24 - Predator捕捉病毒样本
Advent • swordsmanli 发表了文章 • 0 个评论 • 3940 次浏览 • 2018-12-21 16:18
对,你一定看过一个电影,情节是这样的,他们拿着长矛去狩猎异形怪物,它们比人类强健,它们的脸部的器官布置得出奇丑陋。它们的身上总是带了一堆很先进的狩猎武器,它们喜欢在杀死猎物后将尸体剥皮,还会将猎物头骨加工成工艺品,当成战利品收藏。对,这部电影系列就叫Predator。好了,言归正传,我们今天讲的故事其实非常简单,讲述的是elasticsearch引擎在安全领域的简单应用,如何通过elasticsearch来搜索一个病毒,我们开发了一个小小的工具来帮我做跨集群查询,以及SQL-DSL转换接口,我们把这个小工具叫做predator。
背景
我司主要是做病毒相关工作的,近年来,数据爆炸,病毒软件也成几何级数倍数增长,大数据病毒出现自然需要对应的大数据工具来处理它们,简单来讲,就是我们可以把病毒样本的一些属性剥离到elasticsearch中,就和日志来描述一个用户的行为一样,本质来说,它们都是数据,然后,我们研究病毒的一些特征属性,通过简单的搜索,就可以快速分析出一堆可能的病毒样本,再然后,通过一系列的测试,过滤,我们就可以真正的找到我们想要的病毒样本,并且通过这些规则持续的追踪它们,是不是很简单?
问题
事情是那么简单,但是在使用elasticsearch作为特征库的过程中,我们也有这样的问题:
1,多种维度特征
由于存在多种维度特征的病毒,不通模块剥离出不通病毒属性,所以存在多张表来存属性,那么在query的时候就需要跨表,甚至跨集群查询。
2,DSL的复杂度
由于内部研究员们对elasticStack并不熟悉,加上DSL语言相对复杂,我们需要使用更加接近hunman特性的SQL来转换DSL语言。
数据处理架构
我们有一个类似的数据处理架构
Predator和它的Spear
因此,我们开发了一个小工具,其实,这个小工具非常简单,只是简单的解决了上述2个问题:
使用Elasticsearch-SQL插件来包装一个restful的DSL转换SQL接口,当然,目前ES6已经完全支持SQL接口了,哈哈,早点出来我们就不用做那么工作了:) :):)。
简单的写个跨集群的查下聚合器就可以实现跨表查下,其实,这个功能只是简单的查下封装,只是针对特殊的业务场景,没啥参考价值。
至于Spear,它其实就是个predator service的客户端,哈哈,像不像铁血战士拿着长矛开着非常去狩猎的样子:) 。
这是一个规则:
这是规则的查询结果:
长矛的sample code:
```python
cross cluster search by dsls
import json
from spear import Spear
sp = Spear()
dsl_1 = {}
dsl_2 = {}
query_dict = {
json.dumps(dsl_1): {
"cluster": "es_cluster_1",
"type":"xxx"
},
json.dumps(dsl_2): {
"cluster": "es_cluster_2",
"type": "yyy"
}
}
sp.cross_count_by_dsl(query_dict, is_show_help=False)
```
当然长矛也支持SQL接口
总结
其实,这个只是一个user case的工程实践,可以看到的是,伟大的ElasticStack在各行各业,各种大数据领域,如果抛开领域的概念,一切都是数据,那么理论上来说我们可以使用elasticsearch处理任何类型的数据,当然目前业界典型的应用场景还是搜索,日志,甚至于APM,总之,紧跟社区可以学到很多东西啦。
关于ik_max_word配置同义词死循环分词问题
Elasticsearch • medcl 回复了问题 • 6 人关注 • 1 个回复 • 3921 次浏览 • 2018-12-24 10:18
es启动报错,求解
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 1000 次浏览 • 2018-12-21 16:05
社区日报 第485期(2018-12-21)
社区日报 • laoyang360 发表了文章 • 0 个评论 • 2279 次浏览 • 2018-12-21 12:34
http://t.cn/EUu5RI3
2、Elasticsearch7.0计算向量距离新特性抢先看
http://t.cn/EUB4vbo
3、Kubernetes上部署高可用和可扩展的Elasticsearch
http://t.cn/ELhogLr
编辑:铭毅天下
归档:https://elasticsearch.cn/article/6214
订阅:https://tinyletter.com/elastic-daily
es 查询response如何转换成对象
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 6800 次浏览 • 2018-12-21 11:24
es 如何实现索引的平滑过度
Elasticsearch • fanmo3yuan 回复了问题 • 3 人关注 • 2 个回复 • 3077 次浏览 • 2018-12-23 00:03
es有9台机器,3台master,6台data节点,那么kibana配置文件中elasticsearch.url怎么写?
Kibana • Leeeo 回复了问题 • 5 人关注 • 2 个回复 • 2129 次浏览 • 2018-12-21 16:22
Day 21 - ECE 版本升级扫雷实战
Elasticsearch • Ben_Wu 发表了文章 • 1 个评论 • 3643 次浏览 • 2018-12-21 10:50
下面分享的这个案例是当我们在把集群从5.4.1 升级到5.6.12 的过程中,遇到节点关闭受阻,升级不完整等情景。以及对应的处理方法。
首先在ECE中,版本是通过stack的方式管理
Ref : https://www.elastic.co/guide/e ... .html
这些版本都是以docker images的形式存储
因此,ECE根据不同的版本,然后选择对应的docker image就可以创建一个节点了. 那么升级的过程就可以简单分成几个步骤
1.exclude准备升级的节点。
2.停止节点ES进程,更换container 版本。
3.重新启动节点,加入集群。
4.在其他节点上重复以上流程。
在这个过程中, 实际使用的时候发现有一些需要注意的雷区.
扫雷一:使用UI触发升级,必须保证集群没有自定义插件和bundles
ECE 里面的集群操作是通过plan来控制的
任何的集群操作最终都会生成一个plan的diff。如上图,把集群从5.4.1 升级到 5.6.12 会产生以上diff.
正常情况下是没有问题的.
如果集群配置了自定义bundles, 比如LDAP bundles, ref:https://www.elastic.co/guide/e ... .html
那么在集群的plan里面就会存在这么一段配置
那么当我们在按下升级按钮的时候
ECE 只在plan中修改了集群大版本的配置, 但是并没有修改自定义bundles中的版本号(仍然是5.4.1).
在这种情况下去执行升级,会直接产生报错.
界面上没有显示原因, 但是这是因为plan里面大版本和bundle中的版本不一致,然后会导致新增的节点无法启动. 于是ECE 就认为集群升级失败了.
解决方法是手动编辑plan,把自定义bundles中的版本号改成和集群版本一致
然后使用ECE 提供的一种手动使用plan进行集群升级的方式进行升级.
扫雷二:节点无法关闭
ECE 控制container 是通过一个叫做 constructor的服务。constructor 通过接收集群的更改需求,制定具体的更改计划与步骤,指导allocator对container进行操作。同时也负责保证集群高可靠性,通过Availability Zone的数量在不同的AZ上面部署节点。
当Allocator接受到关闭container命令的时候,会尝试去关闭container,如果container处于一个阻塞状态无法响应, 那么关闭命令无法执行成功。这个时候constructor会等待节点关闭,但是allocator又认为节点已经接受到关闭命令了。又或者constructor发送给allocator的过程中网络丢包, 这个时候allocator 没有正确接受关闭container的命令. 整个升级进程就卡住了。 这种情况十分罕见,通常发现一个container如果处于”正在关闭”时间太久了, 那么通常就是中间的通信出现问题了.
解决办法是可以通过手动停止container, 在对应的allocator上面找到container,使用
docker stop <container_name>
停止container,这样可以出发allocator更新container的健康状态,上报这个container已经关闭了, 从而打通流程并执行下一步。
扫雷三: 多版本并存
如果使用上面的方式强行关闭docker container, 虽然可以让升级进程继续进行下去. 但是被手动关闭的节点会保留原来的版本。于是在升级后查看各个节点的版本,会发现部分节点是5.4.1, 部分是5.6.12.
因为节点是强制关闭的, ECE直接认为节点已经完成升级,并重新启动这个container. 而在这个处理中,跳过了升级docker image的一步.
为什么不是生成一个新的container呢? 因为从plan里面可以看到
在默认情况下, ECE 处理版本升级是使用rolling 策略 Ref: https://www.elastic.co/guide/e ... .html
在这个策略下,ECE会停止当前container并直接修改重启。
如果ECE集群容量允许, 可以改成grow_and_shrink 策略, 这样ECE 会创建新的container并且销毁旧的container, 避免集群出现多版本.
如果出现了多版本的集群,可以通过更改集群任意一个配置来触发 grow_and_shrink 同样可以使到版本回归一致.
总结来说ECE 在版本升级方面还是有很多需要改进的地方. 对于ECE用户再说在使用ECE的版本升级功能的时候主要有以下建议
1. 自己学会手动修改plan. 这也是每一个ECE support engineer 都会干的事情.
2.如果集群容量允许,尽量使用 grow_and_shrink的策略来进行集群操作.
kibana页面的Dev Tools模块为什么不断得进行两个post请求?
Kibana • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2540 次浏览 • 2018-12-21 14:02
社区日报 第484期 (2018-12-20)
社区日报 • 白衬衣 发表了文章 • 0 个评论 • 1689 次浏览 • 2018-12-20 19:24
http://t.cn/E45chlT
2.有赞全链路压测实战
http://t.cn/E45cViJ
3.Elasticsearch bool query小结
http://t.cn/E45cKEi
编辑:金桥
归档:https://elasticsearch.cn/article/6212
订阅:https://tinyletter.com/elastic-daily
kibana query 大于值问题。
Kibana • trycatchfinal 回复了问题 • 2 人关注 • 1 个回复 • 6112 次浏览 • 2018-12-26 21:13
Logstash中input-redis如何配置集群
Logstash • zqc0512 回复了问题 • 4 人关注 • 4 个回复 • 3176 次浏览 • 2018-12-24 08:52
能不能根据查询的文档数量进行排序
Elasticsearch • psc0606 回复了问题 • 3 人关注 • 2 个回复 • 2969 次浏览 • 2018-12-20 23:25
logstash sql_last_value 记录的时间比SQL查到的最后一条数据的时间大十四个小时
Logstash • zqc0512 回复了问题 • 4 人关注 • 3 个回复 • 5839 次浏览 • 2018-12-24 08:54
有没有什么办法在对查询影响较小的情况下进行segment操作
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2155 次浏览 • 2018-12-20 15:37














