通过源码安装Zabbix进行监控 服务监控篇
昨天已经完成了zabbix的安装过程,今天就尝试使用zabbix agent来把新的服务器给监控起来。
(English version translate by GPT-3.5)
复制Zabbix agent,不,编译Arm版 zabbix agent
首先,回到zabbix server的服务器上,前往zabbix的安装目录
1 | /usr/local/zabbix |
这个目录的结构如下
1 | tree of /usr/local/zabbix |
由于被监控的机器只需安装 zabbix_agentd
就行,所以这里将 zabbix_agentd
和 etc/zabbix_agentd.conf
给准备好,复制到目标主机,也就是我一开始就想监控的那台Oracle机器上,但是这样子肯定是不行的,因为我那台机器是Arm架构的服务器,这个 zabbix_agentd
是x86架构的,因此直接复制不通,所以还需要在Arm主机上再次编译一个 zabbix_agentd
。
编译过程省略,详见上一篇,编译耗时: 12秒
只不过编译命令变成了
1 | ./configure --enable-agent --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl --prefix=/usr/local/zabbix |
如果中途出现configure错误,例如我刚刚就出现最后一步
1 | config.status: error: Something went wrong bootstrapping makefile fragments |
要注意查看 config.log里面的内容,查看内容后得到是make没有安装导致失败。
zabbix Server中新建一条
在打开的zabbix web中,左侧 监测 - 主机
里面,右上角点击添加主机
我这里添加了一个主机名为 Oracle ARM
的主机
然后切换到 加密
的选项卡中,这里就选择 连接主机,选择 共享密钥(PSK),然后从主机连接,去掉全部的勾然后勾选 共享密钥(PSK)
这里要注意,根据2 使用共享密钥 - zabbix.com 介绍描述如下
不要将敏感信息放在PSK identity(共享密钥一致性)字符串中 - 它通过网络未加密传输。
我就理解成 共享密钥一致性
是名字,谁都能打听到,而 共享密钥(PSK)
是密码,只有自己知道。
里面的psk密钥可以使用 OpenSSL 生成,很简单这样就行了,当然 文档 中还给出了 使用GnuTLS
的方式进行生成,我这里使用OpenSSL生成。
1 | openssl rand -hex 32 |
返回
1 | c59a90b393b24f640055682882f67c8e1479dbf598e66f544fd5afa692cd820e |
将上面这个值填入psk中,保存,建立好后这样子的
配置Zabbix_agentd 主动模式
服务端都已经配置好了,接下来配置客户端,跑到要监控的服务器去,也就是Arm服务器去
写入zabbix_agentd.psk
我在 /usr/local/zabbix/etc/zabbix_agentd.psk
下写入这个文件
1 | echo 'c59a90b393b24f640055682882f67c8e1479dbf598e66f544fd5afa692cd820e' > /usr/local/zabbix/etc/zabbix_agentd.psk |
配置conf
首先设置配置
1 | # 将server设置成0,即关闭本机的10050端口检测,这样的话就是被动接收模式,如果这里配置了就是由server进行主动推送 |
然后配置加密部分,这里跟着文档做就行了
1 | TLSConnect=psk |
启动zabbix_agentd
最后一步,启动服务
1 | sbin/zabbix_agentd |
可以看到/tmp下生成了zabbix_agentd.log 的日志,由于境外服务器网络可能不太好,有概率会失败,但是看到Active check configuration update from [xxx.xxx.xxx.xxx] is working again
就表示数据传上去了。
1 | 92311:20220520:135116.883 Starting Zabbix Agent [Oracle ARM]. Zabbix 6.0.4 (revision 3d787ff402e). |
如果里面报了下面的,表示zabbix server端口不通,检查防火墙或者检查zabbix server是否监听了127.0.0.1(一般大概率原因在前面,因为我就是防火墙忘了开)
1 | 89976:20220520:073726.816 agent #5 started [active checks #1] |
如果出现下面的错误,就得检查下网页上配置的psk密钥和/usr/local/zabbix/etc/zabbix_agentd.psk里面的的内容是否一致。
1 | 92248:20220520:134652.850 Unable to connect to [xxx.xxx.xxx.xxx]:10051 [TCP successful, cannot establish TLS to [[xxx.xxx.xxx.xxx]:10051]: SSL_connect() set result code to SSL_ERROR_SSL: file ../ssl/record/rec_layer_s3.c line 1543: error:14094417:SSL routines:ssl3_read_bytes:sslv3 alert illegal parameter: SSL alert number 47: TLS read fatal alert "illegal parameter"] |
最后效果如下
附:配置Zabbix_agentd 被动模式
接下来,我为另一台AMD服务器配置Agent被动模式(即由zabbix Server主动来获取数据)
首先,配置一台新的主机
这里就不重复描述了,上面一样的配置就行,这里模板我选择的是Linux by Zabbix agent,这里的模板相当于zabbix给你准备好的几个默认监控项,自定义监控项我后面折腾下
配置好后,列表就会增加一套记录,新添加的这一条有 ZBX
标记
下面内容摘抄文档 2 新建主机 - zabbix.com 中的内容
- ZBX 表示主机状态尚未建立,尚未发生监控指标检查
- ZBX 表示主机可用,监控指标检查已成功
- ZBX 表示主机不可用,监控指标检查失败(将鼠标光标移动到图标上以查看错误消息)。可能是由于接口凭证不正确造成了通信问题。检查zabbix server是否正在运行,并稍后尝试刷新页面。
然后将zabbix server端的 sbin/zabbix_agentd
,以及 etc/zabbix_agentd.conf
复制到被监控的服务器(因为第一台是arm服务器,架构不一样,所以需要自行编译,而amd的服务器也属于x86,架构一致就不编译了。),先构建出2个目录
1 | mkdir -p /usr/local/zabbix-agent/sbin |
然后将 sbin/zabbix_agentd
复制到 /usr/local/zabbix-agent/sbin
下,将 etc/zabbix_agentd.conf
复制到 /usr/local/zabbix-agent/etc
,弄好后目录如下,开始之前别忘了备份下zabbix_agentd.conf
1 | /usr/local/zabbix-agent |
配置 zabbix_agentd.conf
1 | # 1. 这里填上zabbix 服务器的ip,这里表示只允许这个ip访问 |
然后配置psk密钥
先在 /usr/local/zabbix-agent/etc/zabbix_agentd.psk
写入刚刚的填写在web页面的密钥,然后按如下配置
1 | TLSConnect=psk |
启动zabbix-agent
这次得换一次命令,因为这个文件是从 zabbix-server 中取来的,而zabbix-server编译时使用了 –prefix=/usr/local/zabbix,所以zabbix_agentd里面的默认配置文件是在 /usr/local/zabbix/etc/zabbix_agentd.conf
,而不是现在新的zabbix-agent文件夹,所以这里必须指定配置文件
1 | sbin/zabbix_agentd -c etc/zabbix_agentd.conf |
然后使用netstat -anp | grep 10050
看到端口在监听了
1 | tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 73453/sbin/zabbix_a |
稍微等一会,就看到数据有了
最后,zabbix_agentd服务化运行
现在无论是zabbix-server,还是两台zabbix-agent都是以临时的后台运行,一旦重启啥都没了,因此需要将其添加到服务。但是这里需要更进一步更改下配置,先在 zabbix-agent
目录下创建一个logs目录
1 | mkdir /usr/local/zabbix-agent/logs |
然后修改下面的配置
1 | # 1. 修改Pid的文件,因为linux中 /tmp目录会被定时清除,所以要将pid生成到一个不会被清除的目录 |
然后创建zabbix用户,这里 -M
表示禁止创建家文件
1 | groupadd zabbix |
将logs更改用户所属
1 | chown -R zabbix:zabbix /usr/local/zabbix-agent/logs |
然后将下面的内容写入 /etc/systemd/system/zabbix-agent.service
1 | [Unit] |
最后,启动服务
1 | systemctl start zabbix-agent |
设置开机启动
1 | systemctl enable zabbix-agent |
好了,结束。