Metricbeat可以采集指标和统计数据并传输到指定的输出,如Elasticsearch或Logstash。
一般需要将数据输出到ES然后通过Kibana做可视化数据展示,但我有一个需求是对采集的数据进行流式分析,流程是metricbeat->logstash->es和kafka。将采集到的数据传输到Logstash中,再通过logstash做分流传输,采集到es做可视化,采集到kafka做流式数据分析。由于metricbeat本身只支持一个输出,所有它无法完成上述需求,只能通过Logstash来做。然而关键问题在于通过间接的方式采集到es的数据是未建立mapping映射的,这导致数据类型与metricbeat 导入的dashboard格式不一致,无法解析间接导入es的指标数据。因此需要在导入数据之前对采集数据所在的索引建立mapping映射,使其Index中的数据符合仪表盘解析数据规则。metricbeat通过es的索引模板方式提前建立好mapping模板,等到创建新索引时自动与模板中设定的索引名匹配,匹配成功自动应用索引模板。
如果用户每次新建一个索引的时候都需要手动创建mapping非常麻烦,es内部维护了template,template定义好了mapping,只要index的名称被template匹配到,那么该index的mapping就按照template中定义的mapping自动创建。而且template中定义了index的shard分片数量、replica副本数量等等属性。
- 先通过Metricbeat导出索引模板
./metricbeat export template > metricbeat.template.json
- 然后通过ES的REST接口创建模板
curl -XPUT -H 'Co