Zabbix
Zabbix是一款功能强大的开源监控解决方案,为企业和组织提供了可靠、灵活且高度可定制的监控能力。
Zabbix提供了一套全面的监控工具和功能,可用于实时监测网络设备、服务器、虚拟机、应用程序和其他IT基础设施。它通过收集指标和数据,并将其可视化,帮助管理员实时掌握系统的健康状态和性能表现。无论您是运维团队还是系统管理员,Zabbix都能帮助您及时发现和解决潜在的问题,从而提高系统的可用性和性能。
Zabbix的特点之一是其灵活性和可扩展性。它支持多种监控方式,包括主动和被动监控、代理和无代理监控,甚至还可以通过自定义插件和脚本来扩展监控能力。此外,Zabbix提供了广泛的告警机制,可以通过电子邮件、短信、即时消息等方式及时通知管理员,确保问题能够迅速得到响应。
Zabbix还具有强大的报告和数据分析功能,可以生成各种类型的图表和报表,帮助管理员了解系统的趋势和性能变化。这使得管理员能够更好地规划资源、预测需求并进行容量规划。
服务器端配置
- 操作系统:centos 7
- 基础环境:LAMP
本文使用的环境是:LAMP,必须事先配置好LAMP或者LNMP环境,并且正常使用才可以继续,LNMP环境大致上一样,具体可以参考本文最后的文章连接
安装软件源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm | |
yum clean all |
安装Zabbix server,Web前端,agent
yum install zabbix-server-mysql zabbix-agent
安装 Zabbix 前端 启用红帽软件集合
yum install centos-release-scl
编辑:/etc/yum.repos.d/zabbix.repo
修改一下内容:
[zabbix-frontend] | |
enabled=1 | |
安装前端包:yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
创建数据库
在服务器主机上如下配置:
mysql -uroot -p | |
password | |
mysql> create database zabbix character set utf8 collate utf8_bin; | |
mysql> create user zabbix@localhost identified by '你的数据库密码'; | |
mysql> grant all privileges on zabbix.* to zabbix@localhost; | |
mysql> set global log_bin_trust_function_creators = 1; | |
mysql> quit; |
导入初始架构和数据,系统将提示您输入新创建的密码。
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
导入数据库架构后禁用 log_bin_trust_function_creators 选项。
mysql -uroot -p | |
password | |
set global log_bin_trust_function_creators = 0; | |
quit; |
为Zabbix server配置数据库
编辑配置文件:/etc/zabbix/zabbix_server.conf
,修改以下内容
DBPassword=你的数据库密码
为Zabbix前端配置PHP
编辑配置文件:/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
删除注释并修改:php_value[date.timezone] = Asia/Shanghai
解决乱码问题
yum -y install wqy-microhei-fonts | |
cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf |
启动Zabbix server和agent进程
systemctl enable --now zabbix-server zabbix-agent httpd rh-php72-php-fpm
Agent(客户端配置)
安装
Windows端
直接在官网下载MSI安装包即可,安装过程中会要求填入服务器IP等信息,如果修改配置,参照Linux客户端修改即可,配置文件默认位置为:C:\Program Files\Zabbix Agent\zabbix_agentd.conf
Linux端
安装 Zabbix 存储库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm | |
yum clean all |
安装 Zabbix agent2
yum install zabbix-agent2
修改配置文件
编辑:/etc/zabbix/zabbix_agent2.conf
,找到并修改以下内容:
Server=zabbix服务器IP | |
ServerActive=zabbix服务器IP | |
Hostname=zabbix agent的英文主机名 |
OpenWRT路由端
安装:
opkg update | |
opkg install zabbix-agentd |
配置方法参照Linux端,配置文件路径如下:
– /etc/zabbix_agentd.conf.d
– /etc/zabbix_agentd.conf
启动、停止、重启命令:
– /etc/init.d/zabbix_agentd enable
– /etc/init.d/zabbix_agentd stop
– /etc/init.d/zabbix_agentd restart
配置agent启动
systemctl enable --now zabbix-agent
服务端连通测试
启动agent后,在服务端主机如下测试
yum install zabbix-get -y | |
zabbix_get -s 'agent主机IP' -p 10050 -k "system.hostname" | |
zabbix_get -s 'agent主机IP' -p 10050 -k "agent.ping" |
shell 反馈正常的信息如下
[root@VM-12-7-centos ~]# zabbix_get -s 'agent主机IP' -p 10050 -k "system.hostname" | |
你的agent主机名 | |
[root@VM-12-7-centos ~]# zabbix_get -s 'agent主机IP' -p 10050 -k "agent.ping" | |
1 |
添加被监控的Agent主机
进入zabbix网页
LAMLP环境默认地址为:服务器IP/zabbix
,用户名:Admin
密码:zabbix
添加agent主机
注意填入正确的agent地址,步骤如图:
成功的话如下图:
如果连接不成功,请尝试重启agent,并检查:防火墙、配置文件、服务器设置的主机模板
配置加密通讯
使用预共享密钥(PSK)
- 生成psk:
openssl rand -hex 32
,得出PSK码 - 配置agent端:
nano /etc/zabbix/zabbix_agentd.d/zabbix_agentd.psk
,把刚才生成的PSK码填入。- 编辑
/etc/zabbix/zabbix_agentd.conf
编辑如下内容:TLSConnect=psk TLSAccept=psk TLSPSKFile=/etc/zabbix/zabbix_agentd.d/zabbix_agentd.psk TLSPSKIdentity=PSK 001 #自定义PSK名称,必须和服务器端一直 - 重启agent:
systemctl restart zabbix-agent
- 服务器前端配置
过一小段时候后
基于API的二次开发
详细的API参考文章请看本文最尾部
以下使用arduino作为基本示例
- 获取你的服务器APItoken,在Linux运行:
- 在获取到token后记下,用于以下的基本示例程序:
获取并5秒钟打印一次CPU占用率:
#include <ESP8266WiFi.h> | |
#include <WiFiClient.h> | |
const char* ssid = "WiFi_SSID"; | |
const char* password = "WiFi密码"; | |
const char* server = "服务器IP或者域名"; | |
const int port = 80; | |
const char* apiPath = "/zabbix/api_jsonrpc.php"; | |
const char* apiToken = "你的APITOKEN"; | |
const char* hostname = "主机名"; | |
void printCPUUsage(); | |
// 定义 API 请求字符串变量 | |
String apiRequest = String() + | |
"{" | |
"\"jsonrpc\": \"2.0\"," | |
"\"method\": \"item.get\"," | |
"\"params\": {" | |
"\"output\": [\"lastvalue\"]," | |
"\"host\": \"" + String(hostname) + "\"," | |
"\"search\": {" | |
"\"key_\": \"system.cpu.load[all,avg1]\"" | |
"}," | |
"\"sortfield\": \"name\"" | |
"}," | |
"\"auth\": \"" + String(apiToken) + "\"," | |
"\"id\": 1" | |
"}"; | |
void setup() { | |
Serial.begin(115200); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(1000); | |
Serial.println("Connecting to WiFi..."); | |
} | |
Serial.println("Connected to WiFi!"); | |
printCPUUsage(); | |
} | |
void loop() { | |
// Do other tasks if needed | |
printCPUUsage(); | |
delay(5000); | |
} | |
void printCPUUsage() { | |
WiFiClient client; | |
if (client.connect(server, port)) { | |
String request = String() + | |
"POST " + apiPath + " HTTP/1.1\r\n" + | |
"Host: " + server + "\r\n" + | |
"Content-Type: application/json\r\n" + | |
"Content-Length: " + String(apiRequest.length()) + "\r\n\r\n" + | |
apiRequest; | |
client.print(request); | |
unsigned long timeout = millis(); | |
while (client.available() == 0) { | |
if (millis() - timeout > 5000) { | |
Serial.println("Error: No response from server!"); | |
client.stop(); | |
return; | |
} | |
} | |
while (client.available()) { | |
String line = client.readStringUntil('\r'); | |
Serial.print(line); | |
} | |
client.stop(); | |
} | |
else { | |
Serial.println("Error: Failed to connect to Zabbix server!"); | |
} | |
} |
获取到的打印效果如图:
!{}(https://chrisxs.com/wp-content/uploads/2023/06/image-1685963031255-150×150.png)[https://chrisxs.com/wp-content/uploads/2023/06/image-1685963031255.png]