干货!Zabbix+ES怎么玩?如何应对海量级监控数据?一文带你玩转开源解决方案。

简介: 干货!Zabbix+ES怎么玩?如何应对海量级监控数据?一文带你玩转开源解决方案。

写在开篇

不管zabbix的后端数据库是oracle还是mysql,当zabbix监控的量级达到了一定程度后,那么对数据库的性能是一个非常严峻的挑战。特别是对历史数据的查询,将会变得非常非常的慢,别告诉我可以建索引优化,当量级达到一定的程度的时候,索引真的没啥效果了。如果再不继续寻找合适的解决方案,那么就一定会引发数据库层面的问题,最终导致服务不可用。当监控数据越来越大的时候,存储不足的时候,怎么办?那就删历史数据呗,但如果要求至少要保存半年甚至1年以上的历史数据,且又高端存储磁阵紧缺面临扩容难题的时候怎么办?而且又同时面临着单个历史表非常庞大的时候怎么办?分库、分表、分区?做读写分离?不!一切都是浮云,还有一个更值得推荐的解决方案,那就是利用Zabbix本身对ES支持的机制来将历史数据存储到ES集群。目前,官方虽然表示Zabbix对Elasticsearch的支持仍处于试验阶段,但笔者认为还是值得一试,且在测试阶段未发现有啥不妥。“生产环境”上也改造了几套对接ES的架构,目前运行均一切正常,ES可快速横向扩展的能力是人尽皆知啊!谁用谁知道。

下面笔者附上对接ES的官方文档链接:https://www.zabbix.com/documentation/5.0/en/manual/appendix/install/elastic_search_setup,且利用测试环境输出了本篇的“精华”。希望可以起到抛砖引玉的效果,欢迎广大盆友可以和笔者一起共同探讨。

架构图

笔者简单画了一下大概的架构图,如下:

环境搭建

由于Oracle、ES、Kibana、Zabbix不是本文的主题,因此这几个组件的安装过程笔者在本文就省略了哈。关于Oracle的安装,笔者在以前的文章中有所讲到,那么ES、Kibana、Zabbix的相关知识点笔者后续也会抽时间输出“精华”,望广大朋友们多多关注哦,非常感谢!

在es中创建索引

  1. 添加数字(无符号)类型的索引
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"
         }
      }
   }
}'
  1. 添加数字(浮点型)类型的索引
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"
         }
      }
   }
}'
  1. 添加字符类型的索引
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"
         }
      }
   }
}'
  1. 添加日志类型的索引
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"
         }
      }
   }
}'
  1. 添加文本类型的索引
curl -X PUT \
 http://localhost:9200/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"
         }
      }
   }
}'

配置Zabbix

1. zabbix server对接es

  • vi /opt/aspire/product/zabbixsvr5/etc/zabbix_server.conf
HistoryStorageURL=local.es.svr:9200
HistoryStorageTypes=uint,dbl,str,log,text

2. zabbix web前端对接es

  • vi /opt/aspire/product/nginx/html/conf/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB, $HISTORY;
$HISTORY['url'] = 'http://local.es.svr:9200';
$HISTORY['types'] = ['uint', 'text', 'log', 'str', 'dbl'];

3. 重启zabbix server和php-fpm即可

# 杀死和拉起zabbix server
ps -aux | grep zabbix_server | grep -v grep | awk '{print $2}' | xargs kill -9
/opt/aspire/product/zabbixsvr5/sbin/zabbix_server -c /opt/aspire/product/zabbixsvr5/etc/zabbix_server.conf
# 杀死和拉起php-fpm
pkill php-fpm
/opt/aspire/product/php7/sbin/php-fpm

对接完成后的验证

1. zabbix查看最新上报的数据

上图可看出上报监控数据正常

2. 在zabbix数据库(oracle)中查询相关历史表是否有数据

笔者通过plsql登录了oracle 19c进行select count操作

通过上图可看到,history、history_log、history_str、history_text、history_uint 这5张表都没有数据写入了

3. 登录kibana查看

上图可看到,历史数据都写入到对应的索引了。

写在最后

此方案是Zabbix官方内置支持的机制,也是比较推荐的解决方案,其实Zabbix从4.2版本就开始支持时序数据库TimescaleDB了,但目前时序数据库不支持Zabbix proxy。如果后端的Oracle或MySQL换成TimescaleDB,再结合ES,是不是变得可以支持更大规模的监控?这是一个值得去测试的解决方案。笔者回头找时间搭建一下,并做压测。好了!时间有限,今晚就此搁笔,感谢广大盆友的关注,望多多点赞、收藏、转发,谢谢!

相关文章
|
9天前
|
监控 安全 前端开发
使用 Zabbix 监控堆外应用
使用 Zabbix 监控堆外应用
25 9
|
4月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
1月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
75 7
|
2月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
【10月更文挑战第5天】随着OceanBase社区版的广泛应用,企业纷纷采用这一高性能、高可用的分布式数据库系统。为了确保系统的稳定运行,使用成熟的Zabbix监控工具进行全面监控至关重要。本文通过具体示例介绍了如何配置Zabbix监控OceanBase,包括安装配置、创建监控模板和监控项、编写脚本、设置触发器及图形展示等步骤,帮助读者快速上手,及时发现并解决问题,确保业务始终处于最佳状态。
76 2
|
3月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
73 2
zabbix agent集成percona监控MySQL的插件实战案例
|
4月前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
108 0
|
6月前
|
监控 数据库 Docker
Zabbix监控神通数据库教程
**摘要:** 本文介绍了如何使用Docker安装和配置神舟通用数据库,并利用Zabbix进行监控。首先,通过Docker安装数据库镜像,启动容器并映射端口。接着,使用默认凭证连接数据库并验证安装。然后,将数据库的Python模块和库文件复制到主机,并安装Python3.5及相应模块,创建外部检查脚本以实现Zabbix的监控功能。示例展示了查询数据库版本的监控指标配置。最后,提到了监控结果的界面展示,并邀请读者探索更多Zabbix监控技巧。
100 0
Zabbix监控神通数据库教程
|
5月前
|
监控 关系型数据库 应用服务中间件
Linux zabbix监控 软件的安装
Linux zabbix监控 软件的安装
|
7月前
|
监控 关系型数据库 MySQL
zabbix 监控mysql服务
zabbix 监控mysql服务
86 0
zabbix 监控mysql服务
|
7月前
|
监控 网络协议 Unix
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
205 0

推荐镜像

更多