【Z投稿】基于Zabbix实现ETCD动态数据监控

2021-02-03 11:14:28 浏览数 (1)

杨帆

广州证券信息中心Zabbix监控系统建设与大数据日志分析系统管理负责人

Zabbix4.0认证ZCS专家

Zabbix大会优秀讲师

近期在开源社区日益火热的Kubernetes项目中用到一款重要组件etcd,渐渐为人们所关注。etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用,持久性数据存储和检索而准备,还可以用于配置共享和服务发现。Etcd相对于和它有类似功能的zookeeper来说更加轻量级。

在日常使用etcd过程中,存储在etcd的数据会随着应用程序各类操作而动态变化。我们做监控的人看到动态变化的数据,就会想哪能否通过Zabbix来监控这些数据从而实现应用程序的监控?下面我通过一个简单的例子演示一下,如何使用Zabbix把etcd里面存储数据监控起来。

1. Etcd的安装

a.首先我们把传说中etcd安装起来,依次运行以下命令或者整成脚本运行:

以上是测试环境安装过程,为方便我们使用。要上生产环境可以参照官方文档。

点击查看

对于etcd不太熟悉的小伙伴,可以去以下链接学习一下。基本操作都在里面了.

点击学习

b.启动etcd单机模式

运行以下命令启动etcd:

/tmp/etcd-download-test/etcd

/tmp/etcd-download-test/etcd

当看到embed: ready to serve client requests 你的etcd单机模式就已经启动成功了。

c.验证是否正常运行:

首先export一下环境变量:

export ETCDCTL_API=3

往etcd数据库写入数据:

/tmp/etcd-download-test/etcdctl put Zabbixtest 888888

从etcd读取数据:

2.Etcd客户端编写

到了这里测试环境的etcd就搭建完成,接下来我们通过go语言写一个读取etcd的客户端,并把数据通过Zabbix sender发送到Zabbix server。

这段代码中用到2个第三方库,一个是go.etcd.io/etcd/clientv3用于连接到etcd,另外一个是github.com/fujiwara/go-Zabbix-get/Zabbix 用于实现Zabbix sender协议的。通过go get url 可以从公共仓库取下来。

代码中有几个变量需要修改环境对应信息。HostName:主机名,Zabbix里面配置agent的主机名;

ZabbixServer:Zabbix server的ip地址;

endpoints:etcd的ip地址。

通过go run 命令把上面的代码运行起来。成功运行的话看到以下返回结果

3.Zabbix监控项配置

我们需要Zabbix添加一个监控项用于接收etcd客户端发过去的数据。

选择一台需要监控的主机(etcd客户端配置的主机名一致的主机),新建一个监控项,监控项的type选择【Zabbix trapper】(Zabbix采集器)。Key要和etcd客户端一致才能接收到数据。为方便调试,数据存储类型选择 Text类型。

4.数据发送测试

通过命令行往etcd写几条数据,模拟应用程序操作。看下Zabbix能否正常接收到数据。

往etcd写入数据:

Etcd命令行

写入2条数据,etcd检测数据的变化,自动发通知给Zabbix。如下下图:

Etcd客户端

Zabbix监控数据

把刚才写入进去数据删除:

Etcd命令行

Zabbix监控数据

5.小结

以上的例子基于etcd watch机制的客户端开发出来,可以实时检测到etcd数据变化并发送到Zabbix server。当然例子比较简单,只是把获取的结果直接返回Zabbix server。但只要在此基础上进行一些简单改造,就可以实现实时的应用程序的监控。下面我举几个可能实现的场景:

1.高可用集群监控,应用程序会把高可用的选举标志放在etcd中,通过监控这个标志状态来实现应用程序高可用集群监控;

2.分布式服务发现的监控,在实现分布式服务过程中,会把服务上线和下线信息注册到etcd中。通过监控etcd中的数据就可以实现分布式服务实时动态监控;

3.应用程序数据监控,例如kubernetes会把配置存储etcd中,比如网络配置数据,存储配置数据,pod的配置数据等等。同样可以把他们监控起来。

0 人点赞