我有一个使用ELK + Kafka的新建环境。我将使用Beats将日志从各种系统传输到Kafka,然后由Logstash使用并最终发送给Elasticsearch。 Beats客户端将无法直接访问Elasticsearch。这意味着,如果我想使用Beats随附的预配置索引模板/仪表板/索引模式,则必须手动运行所有API调用以生成这些。我已经按照本文最底部的说明https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-template.html导入了索引模板。
这有效,并且在索引模板中具有我需要的所有正确映射。但是,Beats在索引模板中的映射与索引模式中的字段之间似乎有一些细微但有用的区别。例如,包含字节数的字段的映射在索引模板中将为long
,但在Kibana索引模式中的格式为bytes
。我认为这是为了使数据保持索引纯净,并在Kibana仪表板内部更友好(即1048576显示为1MB)。
Kibana索引模式的这些字段似乎存储在Beats客户端安装目录内的fields.yml
文件中。所以我在找两件事:
如何使用API创建Kibana索引模式?我发现了一些直接写入.kibana索引的参考,但它们似乎无法正常工作,而且现在看来,建议您不要直接写入.kibana索引,而应使用Kibana Saved Objects API。如何使用“保存的对象” API创建新的索引模式?
我将如何在上面创建上述索引模式并包括此fields.yml
文件中列出的所有预配置字段?我假设我基本上需要将此yaml转换为要在创建索引模式的API调用期间使用的json。我希望有一种方法可以不涉及手动编辑文件。
任何Beats客户端(Filebeat,WinlogBeat等)的任何安装都将具有类似的fields.yml
文件。如果需要,我可以提供一份副本,但它是Beats产品随附的标准。
编辑1:
我找到了一些有关通过Saved Objects API创建索引模式的文档:
https://www.elastic.co/guide/en/kibana/7.4/saved-objects-api-create.html
如果我可以找到一种解析yaml文件并将其转换为json的方法,则可以使用以下方法做到这一点:
POST api/saved_objects/index-pattern/my-index-pattern
{
"attributes": {
"title": "my-index*",
"timeFieldName": "event.created",
"fields": "[{\"name\":\"@timestamp\",\"type\":\"date\"}]"
}
}
但是,它似乎需要XSRF标头。我收到以下错误:
请求必须包含kbn-xsrf标头。
编辑2
我认为kbn-xsrf
标头将需要一些特殊值,但显然它只需要存在即可。
因此,在这一点上,我需要做的就是获取Beats随附的fields.yml
文件的JSON版本。
我可能只是构建一个不在受保护网络后面的小型ELK实例,所以我可以让Beats导入字段,然后通过Saved Object API将其导出,然后将其导入到我的实际环境中。