前言:
公司的应用监控平台又要有所变动了,准备把opentsdb给剔除,改用elasticsearch后端存储。去掉opentsdb的原因很简单,因为在数据量大的时候,hbase rowkey的效率达不到快速返回的需求,尤其针对聚合计算效率低。Opentsdb不支持二级索引,只有一个基于hbase rowkey的主索引,可以按行的排序顺序scan。这使得Opentsdb的tag实现从检索效率上说会很慢。
关于elasticsearch权限的文章,原文地址是 http://xiaorui.cc/2015/10/19/%E4%BD%BF%E7%94%A8tornado%E5%AE%9E%E7%8E%B0elasticsearch%E7%9A%84%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6/
有些跑题了,咱们回到es的访问控制…
elasticsearch官方没有什么好的权限控制,倒是有个商业版的Shield 。Shield是Elastic公司为ElasticSearch开发的一个安全插件。在安装此插件后,Shield会拦截所有对ElasticSearch的请求,并加上认证与加密,保障ElasticSearch及相关系统的安全性。 Shield是商业插件,需ElasticSearch的商业许可。第一次安装许可的时候,会提供30天的免费试用权限。30天后,Shield将会屏蔽cluster health, cluster stats, index stats这几个API,其余功能不受影响。总觉得shield这东西不是很靠谱…
查了下相关的资料,为elasticsearch有这么几种方法。
第一种,在nginx层面做基本验证,优点是及其的简单,缺点是他的权限控制有点粗,不能针对更细致的权限进行操作。或者可以用nginx lua的方式做auth扩展。
第二种,直接用python tornado来做http代理。 在代理层面可以很好的控制黑白名单,及index、type名单。
使用htpasswd工具来创建用户,创建密码。
htpasswd -c -d pass_file user_name
下面是nginx针对elasticsearch负载的配置
upstream elasticsearch {
server 127.0.0.1:9200;
keepalive 1500;
}
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
proxy_pass http://elasticsearch;
proxy_redirect off;
proxy_set_header Authorization ""; #避免代理weblogic重复提示认证问题
proxy_set_header Host host;
proxy_set_header X-Real-IPremote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
}
那么对于第二种开发代理服务的方式,我们可以使用python下最适合做api的框架tornado。话说 ” tornado async httpclient ” 客户端非常适合做高性能的http代理。 我这边以前写了个项目,原本是用来做爬虫http代理服务的,现在倒是觉得很适合做elasticsearch的权限控制 ,但是现在缺少一些规则的过滤,比如字段、bulk批量,delete删除的控制。
https://github.com/rfyiamcool/toproxy
如果你用的是python下的elasticsearch模块,那么需要在创建es连接对象的时候,加入http_auth参数。
from elasticsearch import Elasticsearch es = Elasticsearch(['localhost'], http_auth=('xiaorui.cc', 'xiaorui.cc'), port=9090)
另外logstash在elasticsearch做了权限控制后,配置文件也需要加入密码。
output { elasticsearch { protocol => "http" host => "localhost" index => "xiaorui" document_type => "monitor" template => "xiaorui.json" template_name => "xiaorui" user => "root" password => "xiaorui.cc" } }
写个出来啊 让我forkfork