22

我们最近将集中式日志记录从 Splunk 转移到 ELK 解决方案,并且我们需要导出搜索结果 - 在 Kibana 4.1 中有没有办法做到这一点?如果有,那不是很明显...

谢谢!

4

7 回答 7

26

这是一个很老的帖子。但我认为仍然有人在寻找一个好的答案。

您可以轻松地从 Kibana Discover 导出您的搜索。

先点击保存,再点击分享

先点击**保存**,再点击**分享**

单击CSV 报告

单击 CSV 报告

然后单击生成 CSV

然后点击**生成 CSV**

片刻之后,您将在右下方获得下载选项。

于 2019-08-22T09:31:36.817 回答
14

这适用于 Kibana v 7.2.0 - 将查询结果导出到本地 JSON 文件。这里我假设你有 Chrome,类似的方法可能适用于 Firefox。

  1. Chrome - 打开开发者工具/网络
  2. Kibana - 执行您的查询
  3. Chrome - 右键单击​​网络调用并选择复制/复制为 cURL
  4. 命令行 - 执行[cURL from step 3] > query_result.json。查询响应数据现在存储在query_result.json

编辑:使用以下命令深入到source生成的 JSON 文件中的节点jq

jq '.responses | .[]  | .hits  | .hits | .[]._source ' query_result.json
于 2020-01-16T14:28:52.693 回答
11

如果您想导出日志(不仅仅是时间戳和计数),您有几个选择(tylerjl 在Kibana 论坛上很好地回答了这个问题):

如果您希望实际从 Elasticsearch 导出日志,您可能希望将它们保存在某个地方,因此在浏览器中查看它们可能不是查看数百或数千条日志的最佳方式。这里有几个选项:

  • 在“发现”选项卡中,您可以单击底部附近的箭头选项卡以查看原始请求和响应。您可以单击“请求”并使用 curl(或类似的东西)将其用作对 ES 的查询,以向 ES 查询所需的日志。

  • 您可以使用 logstash 或stream2es206转储索引的内容(使用可能的查询参数来获取您想要的特定文档。)

于 2016-01-29T04:20:14.013 回答
2

@Sean 的回答是正确的,但缺乏细节。

这是一个快速而简单的脚本,它可以通过 httpie 从 ElasticSearch 中获取所有日志,通过 jq 解析和写出它们,并使用滚动光标迭代查询,以便可以捕获前 500 个以上的条目(不像此页面上的其他解决方案)。

这个脚本是用 httpie(http命令)和 fish shell 实现的,但可以很容易地适应更标准的工具,如 bash 和 curl。

查询是根据@Sean 的回答设置的:

在“发现”选项卡中,您可以单击底部附近的箭头选项卡以查看原始请求和响应。您可以单击“请求”并使用 curl(或类似的东西)将其用作对 ES 的查询,以向 ES 查询所需的日志。

set output logs.txt
set query '<paste value from Discover tab here>'
set es_url http://your-es-server:port
set index 'filebeat-*'

function process_page
  # You can do anything with each page of results here
  # but writing to a TSV file isn't a bad example -- note
  # the jq expression here extracts a kubernetes pod name and
  # the message field, but can be modified to suit
  echo $argv | \
    jq -r '.hits.hits[]._source | [.kubernetes.pod.name, .message] | @tsv' \
    >> $output
end

function summarize_string
  echo (echo $argv | string sub -l 10)"..."(echo $argv | string sub -s -10 -l 10)
end

set response (echo $query | http POST $es_url/$index/_search\?scroll=1m)
set scroll_id (echo $response | jq -r ._scroll_id)
set hits_count (echo $response | jq -r '.hits.hits | length')
set hits_so_far $hits_count
echo "Got initial response with $hits_count hits and scroll ID "(summarize_string $scroll_id)

process_page $response

while test "$hits_count" != "0"
  set response (echo "{ \"scroll\": \"1m\", \"scroll_id\": \"$scroll_id\" }" | http POST $es_url/_search/scroll)
  set scroll_id (echo $response | jq -r ._scroll_id)
  set hits_count (echo $response | jq -r '.hits.hits | length')
  set hits_so_far (math $hits_so_far + $hits_count)
  echo "Got response with $hits_count hits (hits so far: $hits_so_far) and scroll ID "(summarize_string $scroll_id)

  process_page $response
end

echo Done!

最终结果是与 Kibana 中的查询匹配的所有日志,在脚本顶部指定的输出文件中,按照process_page函数中的代码进行转换。

于 2020-03-11T21:06:55.677 回答
1

如果您在使用 curl 提出自己的请求时遇到问题,或者您不需要自动程序从 Kibana 中提取日志,只需单击“响应”并获取您需要的内容。

在使用curl时遇到'xsrf token missing'之类的问题后,我发现这种方式更容易和简单!

就像其他人说的那样,单击底部附近的箭头选项卡后会出现请求按钮。

请求按钮

于 2017-09-08T06:51:22.113 回答
0

只导出时间戳和当时的消息计数,而不是日志信息:

生的:

1441240200000,1214 1441251000000,1217 1441261800000,1342 1441272600000,1452 1441283400000,1396 1441294200000,1332 1441305000000,1332 1441315800000,1334 1441326600000,1337 1441337400000,1215 1441348200000,12523 1441359000000,61897

格式化:

"2015 年 9 月 3 日 06:00:00.000","1,214" "2015 年 9 月 3 日, 09:00:00.000","1,217" "2015 年 9 月 3 日, 12:00:00.000","1,342" "2015 年 9 月 3 日, 15:00:00.000","1,452" "2015 年 9 月 3 日, 18:00:00.000","1,396" "2015 年 9 月 3 日, 21:00:00.000","1,332" "2015 年 9 月 4 日, 00:00:00.000 ","1,332" "2015 年 9 月 4 日 03:00:00.000","1,334" "2015 年 9 月 4 日 06:00:00.000","1,337" "2015 年 9 月 4 日 09:00:00.000","1,215" "2015 年 9 月 4 日 12:00:00.000","12,523" "2015 年 9 月 4 日, 15:00:00.000","61,897"

于 2015-09-04T15:42:56.693 回答
-14

当然,您可以从 Kibana 的 Discover (Kibana 4.x+) 导出。1. 在发现页面点击此处的“向上箭头”: 在此处输入图像描述

  1. 现在,在页面底部,您将有两个选项来导出搜索结果

在此处输入图像描述

在 logz.io(我工作的公司),我们将发布基于特定搜索的预定报告。

于 2015-07-29T14:32:26.707 回答