Zabbix 6.0 使用Elasticsearch作为 后端数据库

参考文章:https://twocups.cn/index.php/2021/06/28/42/

001、事先准备

没有装好 Elasticsearch(以下简称 es)的可以参考<https://www.cnblogs.com/suyj/p/16014533.html>,里面有讲到 es 是如何安装并部署的。es 的默认端口是9200

Eticsearch 版本:7.9.1 ,端口:9200

Zabbix 版本:Zabbix 6.0.0beta3 ,端口:80/zabbix

002、Elasticsearch数据存储介绍

原来我们 Zabbix 的数据是存储在 MySQL 中的,按照数据格式的不同分别存储的五个表中:history、history_uint、history_str、history_log、history_text。这五个表和 es 中相对应的索引关系如下。

数据类型zabbix数据库表es索引类型
数字(无符号) history_uint uint
数字(浮点型) history dbl
字符 history_str str
日志 history_log log
文本 history_text text

简单解释一下,字符就是短的词语,文本就是长的句子,日志是数据本身有不同属性,可以被直接一列一列展示出来的。

当我们把 Zabbix 的数据存储到 es 之后,原来的 MySQL 中的这五个数据库表就不再写入新的数据了。

003、Elasticsearch中创建索引

  首先,我们需要在 es 中创建 Zabbix 需要的索引用以接受数据,这是必须要第一步做的。否则如果我们先在 Zabbix 那边设置好连入 es,那么 Zabbix 自然就会发现 es 中没有相应的索引,就会直接在 es 中创建相应的索引。在这个自动创建的索引中,数据的 clock 是 Unix 时间,我们后续的 Kibana 和 Zabbix Web 是无法正常显示的。

  所以,我们第一步必须先在 es 中手动创建相应的索引。如果创建索引的时候报错说索引已经存在了,那可能是 Zabbix 已经先一步创建了。这时候就先停止 Zabbix 服务,然后手动删除这五个索引,然后再按照下面的 shell 指令添加五个索引,之后设置好 Zabbix 相关配置,再启动 Zabbix。

  这些 shell 指令直接打进命令行就行,顺序无先后,注意是要在部署了 es 的那台机器上操作。

添加数字(无符号)类型的索引

curl -X PUT \
 http://localhost:9200/uint \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "type": "long"
         }
      }
   }
}'

添加数字(浮点型)类型的索引

curl -X PUT \
 http://localhost:9200/dbl \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "type": "double"
         }
      }
   }
}'

添加字符类型的索引

curl -X PUT \
 http://localhost:9200/str \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "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://localhost:9200/log \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "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://localhost:8080/text \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "fields": {
               "analyzed": {
                  "index": true,
                  "type": "text",
                  "analyzer": "standard"
               }
            },
            "index": false,
            "type": "text"
         }
      }
   }
}'

004、配置zabbix

 修改 Zabbix 的配置文件

es 那边配置好了,我们再来修改 Zabbix 的配置文件

vim /etc/zabbix/zabbix_server.conf
​
HistoryStorageURL=127.0.0.1:9200
HistoryStorageTypes=uint,dbl,str,log,text

  由于我 Zabbix 服务端和 es 是部署在同一台机器上的,所以可以填127.0.0.1。如果不在同一台机器上,这里填 es 所在机器的 ip 地址。

修改Zabbix 前端文件

首先在文件的开头将该配置文件中的“$DB”和“$HISTORY”设置为全局参数。 

vim /etc/zabbix/web/zabbix.conf.php
<?php // Zabbix GUI configuration file. global $DB, $HISTORY;


#修改两个“$HISTORY”的值。
// Elasticsearch url (can be string if same url is used for all types). 
$HISTORY['url'] = 'http://127.0.0.1:9200';
// Value types stored in Elasticsearch.
$HISTORY['types'] = ['uint', 'text', 'log', 'str', 'dbl'];

重启 zabbix-server 

systemctl restart zabbix-server

稍等一会儿之后,Kibana 和 Zabbix Web 上的数据和图像就显示正常了。

 

004、kibana创建索引

如果想在 Kibana 上看,那么还需要在 Kibana 上创建相应的索引(Configure an index pattern),时间过滤字段(Time Filter field name)填写“clock”。下面简单过一下kibana 创建的过程

http://ip:5601/app/management/kibana/indexPattern

 

 

 

 

 

 

 

 

posted @ 2022-03-16 21:55  Hello_worlds  阅读(1343)  评论(0编辑  收藏  举报