首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-> Vega -> Kibana?

-> Vega -> Kibana?
EN

Stack Overflow用户
提问于 2022-04-07 18:48:51
回答 1查看 171关注 0票数 1

因此,我们希望利用Python在ELK数据上的数据科学和可视化优势,然后使用Elastic发送可视化结果来更新仪表板。

有大量的资源讨论这个问题,其中只有一个实际提供了一个实用的例子,但是他们现在利用了不推荐的安全旁路,更像是一个黑客。具体来说,这是指将索引名设置为.kibana,这将导致错误:

代码语言:javascript
复制
AuthorizationException: AuthorizationException(403, 'security_exception', 'action [indices:data/write/bulk[s]] is unauthorized for user [elastic] with roles [superuser] on indices [.kibana_8.1.2_001,.kibana], this action is granted by the index privileges [create_doc,create,delete,index,write,all]')

我们认为,这必须通过正常的API使用,而不禁用任何安全设置。我们尝试添加一个用户,并添加了所有可能的权限,但它在测试期间无法执行此操作。

下面是提到的例子启发我们尝试这个的首要项目一样。

请注意,Vega 现在是默认功能。的Kibana,而不是一个插件,所以这个工作流应该更可行了。

我们的代码是这样的:

代码语言:javascript
复制
import eland as ed
import datetime
import altair as alt
import eland as ed
import json
import numpy as np
import matplotlib.pyplot as plt
import vega_datasets
from elasticsearch import Elasticsearch

cloud_id = "secret"
http_auth = ("username", "password")
es = Elasticsearch(cloud_id=cloud_id, http_auth=http_auth)

data = vega_datasets.data
pd_df = data.cars()
chart = alt.Chart(pd_df).mark_point().encode(
    x='Miles_per_Gallon',
    y='Horsepower'
).interactive()

def saveVegaVis(client, index, visName, altairChart, resultSize=100, timeField=True):
    chart_json = json.loads(altairChart.to_json())
    visState = {
      "type": "vega",
      "aggs": [],
      "params": {
        "spec": json.dumps(chart_json, sort_keys=True, indent=4, separators=(',', ': ')),
      },
      "title": visName
    }
    visSavedObject={
        "visualization" : {
          "title" : visName,
          "visState" : json.dumps(visState, sort_keys=True, indent=4, separators=(',', ': ')),
          "uiStateJSON" : "{}",
          "description" : "",
          "version" : 1,
          "kibanaSavedObjectMeta" : {
            "searchSourceJSON" : json.dumps({
              "query": {
                "language": "kuery",
                "query": ""
              },
              "filter": []
            }),
          }
        },
        "type" : "visualization",
        "references" : [ ],
        "migrationVersion" : {
          "visualization" : "8.0.0"
        },
        "updated_at" : datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.000Z")
    }


    return client.index(index=index,id='visualization:'+visName,body=visSavedObject)

saveVegaVis(es, 'test_visuals', 'def-vega-cars-1', chart, resultSize=1000)

执行此代码后,我们将得到一条成功消息:

代码语言:javascript
复制
ObjectApiResponse({'_index': 'test_visuals', '_id': 'visualization:def-vega-cars-1', '_version': 8, 'result': 'updated', '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 7, '_primary_term': 1})

但是在ELK内部,结果对象并不像可视化的那样处理,而是被当作一个正常的索引条目来处理。

我们希望它表现得像:

但是,我们只能将其视为一个正常的索引条目,如下所示:

在我们看来,视觉化的所有特征都存在。为了验证这一点,我们导出了Vega可视化来观察数据结构(请原谅任何奇怪之处,导出留下了许多我们试图清理的转义字符):

代码语言:javascript
复制
{
    "attributes": {
        "description": "",
        "kibanaSavedObjectMeta": {
            "searchSourceJSON": {
                "query ":{
                    "query":"",
                    "language":"kuery"
                },
                "filter":[]
            }
        },
        "title": "TEST_VISUAL_PLZ_WORK",
        "uiStateJSON": "{}",
        "version": 1,
        "visState": {
        "title":"TEST_VISUAL_PLZ_WORK",
        "type":"vega",
        "aggs":[],
        "params":{
            "spec":" {
            "$schema": "https://vega.github.io/schema/vega/v3.json", n "width": 300, "height": 100, "data": [{
                n "name": "vals",
                n "values": [n {
                        "category": 50,
                        "count": 30
                    }, {
                        "category": 100,
                        "count": 80
                    }, {
                        "category": 150,
                        "count": 10
                    }, {
                        "category": 200,
                        "count": 50
                    }
                ]
            }], "marks": [{
                "type": "rect",
                "from": {
                    "data": "vals"
                },
                "encode": {
                    "update": {
                        "x": {
                            "field": "category"
                        },
                        "width": {
                            "value": 30
                        },
                        "y": {
                            "field": "count"
                        },
                        "y2": {
                            "value": 0
                        }
                    }
                }
            }]

        }
        "}}"
    },
    "coreMigrationVersion": "8.1.2",
    "id": "6e130cc0-b694-11ec-8df1-41f60ea92d87",
    "migrationVersion": {
        "visualization": "8.0.0"
    },
    "references": [],
    "type": "visualization",
    "updated_at": "2022-04-07T17:04:32.085Z",
    "version": "WzYxOTQsMl0="
} {
    "excludedObjects": [],
    "excludedObjectsCount": 0,
    "exportedCount": 1,
    "missingRefCount": 0,
    "missingReferences": []
}

我们的数据结构似乎与此相匹配。

我们是不是走错路了?有什么小错误吗?是否可以这样做(而不禁用安全协议/“黑客”它)?

EN

回答 1

Stack Overflow用户

发布于 2022-04-07 19:37:12

看看这个例子,看起来他们把它放到了一个.kibana索引中,我知道这是一个与基班纳相关的特殊索引。您可能希望将索引更改为该索引,并查看会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71787487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档