我正在使用 Logstash , ElasticSearch 和 Kibana 来允许多个用户登录并查看他们转发的日志数据。我为每个用户创建了索引别名。这些限制了他们的结果只包含他们自己的数据。
我想将用户分配到组,并允许用户查看其组中计算机的数据。我在组和用户之间创建了父子关系,并在别名上创建了术语查找过滤器。
我的问题是,当我尝试应用别名时收到RoutingMissingException
。
有没有办法为术语查找过滤器指定路由?如何在父文档中查找术语?
我在下面发布了地图和别名,但是link可以获得完整的要点。
curl -XPUT 'http://localhost:9200/accesscontrol/' -d '{
"mappings" : {
"group" : {
"properties" : {
"name" : { "type" : "string" },
"hosts" : { "type" : "string" }
}
},
"user" : {
"_parent" : { "type" : "group" },
"_routing" : { "required" : true, "path" : "group_id" },
"properties" : {
"name" : { "type" : "string" },
"group_id" : { "type" : "string" }
}
}
}
}'
# Create the logstash alias for cvializ
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "logstash-2014.04.25", "alias" : "cvializ-logstash-2014.04.25" } },
{
"add" : {
"index" : "logstash-2014.04.25",
"alias" : "cvializ-logstash-2014.04.25",
"routing" : "intern",
"filter": {
"terms" : {
"host" : {
"index" : "accesscontrol",
"type" : "user",
"id" : "cvializ",
"path" : "group.hosts"
},
"_cache_key" : "cvializ_hosts"
}
}
}
}
]
}'
答案 0 :(得分:0)
在尝试找到此错误的解决方法时,我submitted a bug到ElasticSearch团队,并收到他们的答复。这是ElasticSearch中的一个错误,在动态映射之前应用了过滤器,导致一些错误的输出。我在下面列出了他们的解决方法:
PUT /accesscontrol/group/admin
{
"name" : "admin",
"hosts" : ["computer1","computer2","computer3"]
}
PUT /_template/admin_group
{
"template" : "logstash-*",
"aliases" : {
"template-admin-{index}" : {
"filter" : {
"terms" : {
"host" : {
"index" : "accesscontrol",
"type" : "group",
"id" : "admin",
"path" : "hosts"
}
}
}
}
},
"mappings": {
"example" : {
"properties": {
"host" : {
"type" : "string"
}
}
}
}
}
POST /logstash-2014.05.09/example/1
{
"message":"my sample data",
"@version":"1",
"@timestamp":"2014-05-09T16:25:45.613Z",
"type":"example",
"host":"computer1"
}
GET /template-admin-logstash-2014.05.09/_search