如何使用GET响应对Kibana仪表板进行卷曲以查找所有仪表板ID和/或仪表板内容

巴雷特

因此,我正在尝试从环境中自动化内部Kibana仪表板的抓取,以实现信息收集目的。我已经看过以下链接,但是Elasticsearch似乎并没有真正提供我在这里试图做或要完成的事情的良好示例。我有几个约束:1.命令必须以BASH格式存储; 2.我不能使用任何编译器(例如Python)和Requests和/或Beautifulsoup模块来获取信息并进行解析。

这是我的难题:我登录到Kibana信息中心:

一些http:// <IP_ADDRESS>:5601 / app / kibana#/ dashboards__g =(refreshInterval:(pause:!t,value:0),time:(from:now-1h,mode:quick,to:now ))

如果我正确地进入环境,它将看起来像这样。

在此处输入图片说明

我要收集三个仪表板:

  1. API回应
  2. 日志
  3. 通知事项

我使用的示例curl命令如下所示来刮擦仪表板:

curl -s http://<IP_ADDRESS>:5601/app/kibana#/dashboard/API\ RESPONSES
curl -s http://<IP_ADDRESS>:5601/app/kibana#/dashboard/logs
curl -s http://<IP_ADDRESS>:5601/app/kibana#/dashboard/notifications

现在,Elasticsearch文档中提到了仪表板ID,除非打开网页并在要向其发送GET请求的特定元素上使用检查工具,否则我看不到它。我正在尝试通过卷曲主仪表板页面来实现这一点:

curl -s http://<IP_ADDRESS>:5601/app/kibana#/dashboard/_search?pretty

我的输出将返回HTML输出,但是它似乎没有变化,在不知道仪表板ID的情况下,我无法正确获取仪表板。此外,我试图查看可用的仪表板,并根据一个人在环境中设置的内容将所有仪表板抓取,因此,此过程是动态的,这一点很重要。我的最终目标是:

  1. 仪表板ID可用
  2. 按ID刮除仪表板

基本上,我想卷曲此输出以获取返回JSON。 在此处输入图片说明 在此处输入图片说明

任何想法将不胜感激。

巴雷特

所以很明显,我在错误的位置卷曲。我需要为VIP和Kibana Index的端口9200卷曲,以插入可用的仪表板。

rbarrett@cfg01:~$ curl -s http://<IP_ADDRESS>:9200/.kibana/dashboard/_search?pretty
{
  "took" : 15,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : ".kibana",
        "_type" : "dashboard",
        "_id" : "logs",
        "_score" : 1.0,
        "_source" : {
          "description" : "",
          "hits" : 0,
          "kibanaSavedObjectMeta" : {
            "searchSourceJSON" : "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}]}"
          },
          "optionsJSON" : "{\"darkTheme\":true}",
          "panelsJSON" : "[{\"col\":1,\"columns\":[\"Hostname\",\"Logger\",\"programname\",\"severity_label\",\"Payload\",\"environment_label\"],\"id\":\"search-logs\",\"panelIndex\":5,\"row\":13,\"size_x\":12,\"size_y\":12,\"sort\":[\"Timestamp\",\"desc\"],\"type\":\"search\"},{\"col\":1,\"id\":\"NUMBER-OF-LOG-MESSAGES-PER-SEVERITY\",\"panelIndex\":7,\"row\":9,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"TOP-10-PROGRAMS\",\"panelIndex\":9,\"row\":5,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":1,\"id\":\"LOG-MESSAGES-OVER-TIME-PER-SOURCE\",\"panelIndex\":10,\"row\":1,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"TOP-10-HOSTS\",\"panelIndex\":11,\"row\":9,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":1,\"id\":\"TOP-10-SOURCES\",\"panelIndex\":14,\"row\":5,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"LOG-MESSAGES-OVER-TIME-PER-SEVERITY\",\"panelIndex\":16,\"row\":1,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"}]",
          "timeFrom" : "now-1h",
          "timeRestore" : true,
          "timeTo" : "now",
          "title" : "Logs",
          "uiStateJSON" : "{\"P-10\":{\"vis\":{\"legendOpen\":true}},\"P-11\":{\"vis\":{\"colors\":{\"Count\":\"#629E51\"},\"legendOpen\":true}},\"P-12\":{\"spy\":{\"mode\":{\"fill\":false,\"name\":null}},\"vis\":{\"colors\":{\"Count\":\"#2F575E\"},\"legendOpen\":false}},\"P-14\":{\"vis\":{\"legendOpen\":true}},\"P-7\":{\"vis\":{\"legendOpen\":false}},\"P-9\":{\"vis\":{\"colors\":{\"Count\":\"#99440A\"},\"legendOpen\":true}}}",
          "version" : 1
        }
      },
      {
        "_index" : ".kibana",
        "_type" : "dashboard",
        "_id" : "notifications",
        "_score" : 1.0,
        "_source" : {
          "description" : "",
          "hits" : 0,
          "kibanaSavedObjectMeta" : {
            "searchSourceJSON" : "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}]}"
          },
          "optionsJSON" : "{\"darkTheme\":true}",
          "panelsJSON" : "[{\"col\":1,\"columns\":[\"Logger\",\"publisher\",\"severity_label\",\"event_type\",\"old_state\",\"old_task_state\",\"state\",\"new_task_state\",\"environment_label\",\"display_name\"],\"id\":\"search-notifications\",\"panelIndex\":1,\"row\":14,\"size_x\":12,\"size_y\":11,\"sort\":[\"Timestamp\",\"desc\"],\"type\":\"search\"},{\"col\":1,\"id\":\"NOTIFICATIONS-OVER-TIME-PER-SOURCE\",\"panelIndex\":2,\"row\":1,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NOTIFICATIONS-OVER-TIME-PER-SEVERITY\",\"panelIndex\":3,\"row\":1,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"EVENT-TYPE-BREAKDOWN\",\"panelIndex\":4,\"row\":5,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"SOURCE-BREAKDOWN\",\"panelIndex\":5,\"row\":5,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"HOST-BREAKDOWN\",\"panelIndex\":6,\"row\":10,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NOTIFICATIONS-PER-SEVERITY\",\"panelIndex\":7,\"row\":10,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"}]",
          "timeFrom" : "now-1h",
          "timeRestore" : true,
          "timeTo" : "now",
          "title" : "Notifications",
          "uiStateJSON" : "{\"P-4\":{\"vis\":{\"legendOpen\":true}},\"P-7\":{\"vis\":{\"legendOpen\":false}}}",
          "version" : 1
        }
      }
    ]
  }
}

之后,我可以使用JQ提取现有的ID:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章