从 Graylog 中删除特定的日志消息

Delete a specific log message from Graylog

我需要从 Graylog 中删除特定的日志消息,但是似乎没有任何 public API 可以执行此操作(通过 Graylog API 浏览器) .

很少有关于如何执行此操作的文档。我发现一些随机文章暗示它 is/was 可以通过 curl 和查询 API,但没有实质性内容。

假设可以通过“http://1.2.3.4:5678”访问 graylog,并且我在索引 "graylog_0" 中收到了一条 ID 为“94c84300-d3c1-11e6-b900-005056ac343f”的消息,我将如何处理删除此消息 ?

由于您可以访问 ES,因此可以直接在 ES 中删除消息。如果你的消息在过去的索引中,你需要让它再次可写,因为所有过去的索引都被 Graylog 设为只读,所以首先 运行 这个:

curl -XPUT 'http://localhost:9200/graylog_0/_settings' -d '{
   "index" : {
      "blocks.write" : false
   }
}'

然后你可以删除你的消息

curl -XDELETE 'http://localhost:9200/graylog_0/message/94c84300-d3c1-11e6-b900-005056ac343f

最后,您需要再次将索引设置为只读

curl -XPUT 'http://localhost:9200/graylog_0/_settings' -d '{
   "index" : {
      "blocks.write" : true
   }
}'

您可能还希望让 Graylog 重新计算索引范围,因此您可以 运行 直接针对 Graylog 服务器:

curl -XPOST http://1.2.3.4:5678/system/indices/ranges/rebuild

更新

如果要批量删除多条消息,可以使用批量API轻松:

curl -XPOST 'http://localhost:9200/graylog_0/message' -d '
{"delete":{ "_id": "94c84300-d3c1-11e6-b900-005056ac343f"}}
{"delete":{ "_id": "94c84300-d3c1-11e6-b900-005056ac543e"}}
{"delete":{ "_id": "94c84300-d3c1-11e6-b900-005056ac8694"}}
{"delete":{ "_id": "94c84300-d3c1-11e6-b900-005056ac1264"}}
'