使用Elasticsearch作为Zabbix历史数据存储位置
从Zabbix的3.4.5版本开始,可以直接选择Elasticsearch作为Zabbix监视结果的存储位置。
之前需要使用fluentd等工具,将监视结果和日志结果分开处理和管理,现在可以通过Zabbix功能与Elasticsearch进行有效的协同工作。
由于Zabbix在日志监控和分析方面曾经稍显不足,因此通过这个新功能,对监控结果数据的利用变得更加容易了,不是吗?
你可以在Zabbix官方文档中详细了解。
现在我们来解释一下如何使用方法。
Zabbix和Elasticsearch的安装
不提供导入步骤,但一般情况下需要分别安装。
需要允许通信才能从Zabbix调用Elasticsearch的Web API。(ES的默认是http://elasticsearch的主机:9200)
顺便一提,本次所试验的各个版本如下。
-
- Zabbix: 4.0.0 α3
- Elasticsearch: 5.6.7
Zabbix服务器的设置更改。
zabbix_server.conf文件中新增了HistoryStorageURL和HistoryStorageTypes两个设置项。
HistoryStorageURL=http://Elasticsearchのホスト名orIP:9200
HistoryStorageTypes=str,log,text
在HistoryStorageURL中指定Elasticsearch API的URL,在HistoryStorageTypes中指定想要用Elasticsearch管理的数据类型。
以上设置是关于将”字符串、日志、文本”数据存储到Elasticsearch中的示例。
如果还想将数字类型的”整数、浮点数”数据注册到Elasticsearch,需要添加”uint,dbl”。
似乎可以根据数据类型将存储位置更改为Elasticsearch。目前似乎不能更改每个个体项目的存储位置。
修改Zabbix Web的设置
因为还需要从Web管理界面访问Elasticsearch的数据,所以需要进行更改。
// global $DB;
global $DB, $HISTORY;
・・・略
$HISTORY['url'] = 'http://Elasticsearchのホスト名orIP:9200';
$HISTORY['types'] = ['str', 'text', 'log'];
Elasticsearch的映射定义
以上是Zabbix方面的设置已经完成。
接下来需要在Elasticsearch方面进行预先的映射定义。
创建一个名为”text”的索引,并定义其映射。
它应该具有字段”itemid”、”clock”和”value”。
curl -X PUT http://Elasticsearchのホスト名orIP:9200/text -H 'content-type:application/json' -d '{
"settings" : {
"index" : {
"number_of_replicas" : 1,
"number_of_shards" : 5
}
},
"mappings" : {
"values" : {
"properties" : {
"itemid" : {
"type" : "long"
},
"clock" : {
"format" : "epoch_second",
"type" : "date"
},
"value" : {
"fields" : {
"analyzed" : {
"index" : true,
"type" : "text",
"analyzer" : "standard"
}
},
"index" : false,
"type" : "text"
}
}
}
}
}'
我们也可以为log和str进行定义。
根据analyzer的设置部分或用途的不同,可以进行各种调整和应用。先暂时使用standard的analyzer进行注册。
curl -X PUT http://Elasticsearchのホスト名orIP:9200/log -H 'content-type:application/json' -d '
{
"settings" : {
"index" : {
"number_of_replicas" : 1,
"number_of_shards" : 5
}
},
"mappings" : {
"values" : {
"properties" : {
"itemid" : {
"type" : "long"
},
"clock" : {
"format" : "epoch_second",
"type" : "date"
},
"value" : {
"fields" : {
"analyzed" : {
"index" : true,
"type" : "text",
"analyzer" : "standard"
}
},
"index" : false,
"type" : "text"
}
}
}
}
}'
curl -X PUT http://Elasticsearchのホスト名orIP:9200/str -H 'content-type:application/json' -d '
{
"settings" : {
"index" : {
"number_of_replicas" : 1,
"number_of_shards" : 5
}
},
"mappings" : {
"values" : {
"properties" : {
"itemid" : {
"type" : "long"
},
"clock" : {
"format" : "epoch_second",
"type" : "date"
},
"value" : {
"fields" : {
"analyzed" : {
"index" : true,
"type" : "text",
"analyzer" : "standard"
}
},
"index" : false,
"type" : "text"
}
}
}
}
}'
重启Zabbix服务器和Apache。
在完成上述设置后,重新启动Zabbix服务器和Apache。
$ sudo systemctl restart zabbix-server.service
$ sudo systemctl restart httpd.service
这样,基本设置就完成了。
将日志数据添加到Zabbix项中。
为了尝试一下,我将创建一个日志型项目并尝试使用zabbix_sender进行注册。
监视物品的制作方式如下图所示。

对于这个项目,可以使用以下命令来注册数据。
$ zabbix_sender -z localhost -s test-server01 -k log.test -o 'This is log test'
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.001055"
查看已在Elasticsearch注册的数据
如果已经安装了Kibana,可以从Kibana界面上进行确认。
可以看到数据已经注册到名为log的索引上。

为了确认,我将从Elasticsearch的API中搜索数据。
curl -XGET 'http://Elasticsearchのホスト名orIP:9200/log/_search?q=*&pretty=true'
{
"took" : 42,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "log",
"_type" : "values",
"_id" : "AWGOw-q5993wWmv8Di8Z",
"_score" : 1.0,
"_source" : {
"itemid" : 28250,
"value" : "This is log test",
"timestamp" : 0,
"source" : "",
"severity" : 0,
"logeventid" : 0,
"clock" : 1518518659,
"ns" : 18404355,
"ttl" : 0
}
}
]
}
}
已经顺利注册。
在Zabbix上查看数据
接下来,我们将确认Zabbix系统中如何显示以及在RDBMS中的具体情况。
从Web管理页面来看,没有任何问题,已经成功注册。

通常情况下,DB的数据会保存在history_log中,但根据以下情况,我们发现没有记录,数据只存储在Elasticsearch上。
MariaDB [zabbix]> select * from history_log;
Empty set (0.00 sec)
总结
我简单地介绍了Zabbix的新功能——与Elasticsearch的集成功能。也许,这个功能将来不仅仅局限于Elasticsearch,可能会进一步提供各种不同的历史数据存储方式。(不仅限于Elasticsearch的定义方法,而是可以通过设置HistoryStorage来实现)
这样做不仅仅是为了监控,还可以方便地分析日志和文本数据。随着Zabbix 4.0的即将发布,我相信很快就能在正式的长期支持版本(LTS版)中使用这个功能。真是令人期待。