Zabbix4.0-LTS配置手册

版本发布时间:2018-10-01

snow chuai汇总、整理、撰写---2020/2/1
最后更新日期---2020/12/18


1. 安装及配置Zabbix
1.1 安装httpd
[root@node1 ~]# yum install httpd -y
[root@node1 ~]# rm -f /etc/httpd/conf.d/welcome.conf
1.2 安装php7
[root@node1 ~]# yum install yum-plugin-priorities -y 
[root@node1 ~]# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm -y
[root@node1 ~]# sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/remi-safe.repo
[root@node1 ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/remi-safe.repo
[root@node1 ~]# yum --enablerepo=remi-safe,epel install php72 php72-php-pear php72-php-mbstring -y
[root@node1 ~]# scl enable php72 bash
[root@node1 ~]# php -v
PHP 7.2.27 (cli) (built: Jan 22 2020 09:39:04) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
[root@node1 ~]# vim /etc/profile.d/php72.sh #!/bin/bash
source /opt/remi/php72/enable export X_SCLS="`scl enable php72 'echo $X_SCLS'`"

[root@node1 ~]# yum --enablerepo=remi-safe,epel -y install php72-php [root@node1 ~]# systemctl enable --now httpd
[root@node1 ~]# echo '<?php phpinfo(); ?>' > /var/www/html/info.php [root@node1 ~]# curl http://localhost/info.php | grep 'PHP Version' | tail -1 | sed -e 's/<[^>]*>//g' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 68986 0 68986 0 0 1309k 0 --:--:-- --:--:-- --:--:-- 1320k PHP Version 7.2.27
1.3 安装MariaDB
[root@node1 ~]# yum install centos-release-scl-rh centos-release-scl -y
[root@node1 ~]# sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl.repo
[root@node1 ~]# sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[root@node1 ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-SCLo-scl.repo
[root@node1 ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[root@node1 ~]# yum --enablerepo=centos-sclo-rh install rh-mariadb102-mariadb-server -y [root@node1 ~]# scl enable rh-mariadb102 bash [root@node1 ~]# vim /etc/profile.d/rh-mariadb102.sh #! /bin/bash
source /opt/rh/rh-mariadb102/enable export X_SCLS="`scl enable rh-mariadb102 'echo $X_SCLS'`"

[root@node1 ~]# vim /etc/opt/rh/rh-mariadb102/my.cnf.d/mariadb-server.cnf ...... ...... ...... ...... ...... ......
# 在[mysqld]区段最后追加如下内容 max_allowed_packet = 256M innodb_buffer_pool_size = 512M innodb_log_file_size = 30M innodb_log_buffer_size = 32M
innodb_file_per_table = 1 innodb_large_prefix=1 innodb_file_format = Barracuda innodb_strict_mode = 0

...... ...... ...... ...... ...... ......
[root@node1 ~]# systemctl enable --now rh-mariadb102-mariadb
[root@node1 ~]# mysql_secure_installation
...... ...... Thanks for using MariaDB!
1.4 安装Zabbix Server
[root@node1 ~]#yum --enablerepo=remi-safe,epel install php72-php php72-php-mysqlnd php72-php-gd php72-php-xml php72-php-bcmath php72-php-ldap -y
[root@node1 ~]# yum install http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm -y
[root@node1 ~]# systemctl restart httpd [root@node1 ~]# yum install zabbix-get zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
1.5 配置Zabbix Server
1) 配置Zabbix Server数据库
[root@node1 ~]# mysql -u root -p
Enter password:
......
......
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'password'; Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'password'; Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit Bye
[root@node1 ~]# cd /usr/share/doc/zabbix-server-mysql-4.0.17/ [root@node1 zabbix-server-mysql-4.0.17]# gzip -d create.sql.gz [root@node1 zabbix-server-mysql-4.0.17]# mysql -u root -p zabbix < create.sql Enter password:
# 如果出现 "ERROR 1118 (42000) at line 1278: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline." 错误,请按以下步骤解决此错误
[root@node1 zabbix-server-mysql-4.0.17]# vim /etc/opt/rh/rh-mariadb102/my.cnf.d/mariadb-server.cnf # 在[mysqld]区段最后追加如下内容 max_allowed_packet = 256M innodb_buffer_pool_size = 512M innodb_log_file_size = 30M innodb_log_buffer_size = 32M
innodb_file_per_table = 1 innodb_large_prefix=1 innodb_file_format = Barracuda # innodb_strict_mode设置影响CREATE TABLE,ALTER TABLE和CREATE INDEX语句的语法错误的处理。innodb_strict_mode还启用了记录大小检查,因此INSERT或UPDATE永远不会失败,因为记录对于所选页面大小而言太大。 innodb_strict_mode = 0
[root@node1 zabbix-server-mysql-4.0.17]# systemctl restart rh-mariadb102-mariadb

# 错误解决完成之后,进入MariaDB使用drop database zabbix;指令删除数据库。并根据1.5小节中的第一步重新创建数据库及授权
[root@node1 zabbix-server-mysql-4.0.17]# cd [root@node1 ~]#
[root@node1 ~]# vim /etc/zabbix/zabbix_server.conf # 更改91行,设定DB Server所在位置 DBHost=localhost
# 更改100行,设定zabbix的DB名称 DBName=zabbix
# 更改116行,设定zabbix数据的的连接账户 DBUser=zabbix
# 更改124行,设定zabbix数据的的连接账户的密码 DBPassword=password
# 为zabbix-server.service文件增加MariaDB信息 [root@node1 ~]# systemctl cat zabbix-server.service # /usr/lib/systemd/system/zabbix-server.service [Unit] Description=Zabbix Server After=syslog.target After=network.target After=mysql.service After=mysqld.service After=mariadb.service After=postgresql.service ..... .....
[root@node1 ~]# systemctl edit zabbix-server.service # 添加如下内容 [Unit] ...... ...... ...... After=rh-mariadb102-mariadb.service
[root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable --now zabbix-server
2) 设置SELinux [root@node1 ~]# setsebool -P zabbix_can_network on [root@node1 ~]# setsebool -P httpd_can_connect_zabbix on [root@node1 ~]# setsebool -P daemons_enable_cluster_mode on [root@node1 ~]# vim zabbix_server.te # create new module zabbix_server 1.0;
require { type zabbix_var_run_t; type zabbix_t; class sock_file { create unlink }; class unix_stream_socket connectto; }
#============= zabbix_t ============== allow zabbix_t self:unix_stream_socket connectto; allow zabbix_t zabbix_var_run_t:sock_file { create unlink };

[root@node1 ~]# checkmodule -m -M -o zabbix_server.mod zabbix_server.te checkmodule: loading policy configuration from zabbix_server.te checkmodule: policy configuration loaded checkmodule: writing binary representation (version 17) to zabbix_server.mod
[root@node1 ~]# semodule_package --outfile zabbix_server.pp --module zabbix_server.mod [root@node1 ~]# semodule -i zabbix_server.pp
3) Firewalld设置 [root@node1 ~]# firewall-cmd --add-service={http,https} --permanent success [root@node1 ~]# firewall-cmd --add-port={10051/tcp,10050/tcp} --permanent success [root@node1 ~]# firewall-cmd --reload success
4) 设置Zabbix Agent以监测Zabbix Server [root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf # 更改98行,设定zabbix Server的位置 Server=127.0.0.1
# 更改139行,设定zabbix Server的位置 ServerActive=127.0.0.1 # 更改150行,设定zabbix Server的FQDN的位置 Hostname=node1.1000cc.net
[root@node1 ~]# systemctl enable --now zabbix-agent
5) 为Zabbix Server配置httpd服务 [root@node1 ~]# vim /etc/httpd/conf.d/zabbix.conf # 注释9行,不允许所有网络连接Zabbix平台 # 添加第10行内容,仅允许指定网络访问Zabbix Server。 #Require all granted Require ip 127.0.0.1 192.168.10.0/24
# 注释12行,21行两行。取消20行注释,并修改本地的时区. #<IfModule mod_php5.c> php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value max_input_vars 10000 php_value always_populate_raw_post_data -1 php_value date.timezone Asia/Shanghai #</IfModule>
# 移除旧有的5.x版本的php相关文件 [root@node1 ~]# mv /etc/httpd/conf.modules.d/10-php.conf /etc/httpd/conf.modules.d/10-php.conf.bak [root@node1 ~]# mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf.bak
[root@node1 ~]# systemctl restart httpd
2. 初始化Zabbix Server
1) 开启浏览器进入zabbix初始化界面
浏览器->http://Zabbix-Server/zabbix

2) 确认所有环境准备oK
3) 确认所连接的数据库信息,并填写好password
4) 设定主机详细信息
5) 确认配置信息
6) 配置成功通告
7) 登录Zabbix Server管理界面(账户名:Admin,初始密码:zabbix)
8) 登入至Zabbix Server
3. 修改初始化密码并改变界面语言
1)  点击账户头像

2) 点击"change password"
3) 修改 password并将Language改为Chinese (zh_CN).点击"update"
4) 配置完成成功
4. 添加监测主机(本地Zabbix Server)
1)  点击[配置]=>[主机]

2) 安装了Zabbix代理主机会显示在界面上。找到Zabbix Server主机,勾选后选择启用


3) 点击[监测]=>[聚合图形],点击[Zabbix Server].等待数分钟后将出现数据

5. 配置邮件通知
5.1 设置SMTP
1) 点击[管理]==>[报警媒介类型]===>[Email]

1) 设置Email报警的SMTP相关信息,完成后点击[更新]

5.2 设定邮件通知
1) 点击[配置]==>[动作]===>勾选"Report problems to Zabbix administrators"==>启用



1) 设置Email报警的SMTP相关信息,完成后点击[更新]

5.3 设定账户邮件
1) 点击[管理]==>[用户]==>点击[Admin]==>[媒介报警]==>[添加]

2) 点击[媒介报警]==>[添加]
3) 设定管理员的邮箱地址==>[添加]
4) 完成后点击[更新]
5.4 设定报警动作
1) 点击[配置]==>[动作]===>[Report problems to Zabbix administrators]

2) 设定触发条件后==>[添加]


3) 点击==>[操作]==>[操作细节]



6. 添加监测主机(远程客户端)
6.1 为监测机配置Zabbix Agent
1) 安装Zabbix Agent
[root@node2 ~]# yum install http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm -y
[root@node2 ~]# yum install zabbix-agent -y
2) 配置并启动Zabbix Agent [root@node2 ~]# vim /etc/zabbix/zabbix_agentd.conf # 设定98行,指定Zabbix Server的IP/FQDN Server=192.168.10.11 # 设定139行,指定Zabbix Server的IP/FQDN ServerActive=192.168.10.11 # 设定150行,指定本节点的IP/FQDN Hostname=node2.1000cc.net
[root@node2 ~]# systemctl enable --now zabbix-agent
3) 防火墙设置 [root@node2 ~]# firewall-cmd --add-port=10050/tcp --permanent success [root@node2 ~]# firewall-cmd --reload success
6.2 在Zabbix Server上添加监测主机
1) 进入Zabbix Server WEB-UI
2) 点击[主机]==>[配置]==>[创建主机]

3) 点击[模板]==>[选择]




6.3 在Zabbix Server监测目标主机
2) 点击[监测]==>[最新数据]




3) 点击[监测]==>[图形]

7. 实现钉钉监控报警
1) 使用钉钉电脑版,找到所需要报警的群组,创建一个机器人








2) 安装PrometheusAlert的zabbix监控端 [root@node1 ~]# yum install git -y
[root@node1 ~]# git clone https://gitee.com/feiyu563/PrometheusAlert.git
[root@node1 ~]# cp PrometheusAlert/example/linux/zabbix /usr/lib/zabbix/alertscripts/ [root@node1 ~]# chown zabbix. /usr/lib/zabbix/alertscripts/zabbix [root@node1 ~]# chmod 755 /usr/lib/zabbix/alertscripts/zabbix
3) 测试zabbix监控端 (1) 直接使用http://dingding.datafountain.cn/zabbix发送告警信息 # zabbix监控端参数说明 -d PrometheusAlert的地址 PrometheusAlert的地址 (default "http://127.0.0.1:8080/zabbix")
-h 显示帮助
-m 告警消息内容 需要发送的告警消息内容 (default "zabbix告警测试")
-t 手机号/钉钉url/微信url/飞书url 指定告警消息的接收目标的手机号/钉钉url/微信url (default "https://oapi.dingtalk.com/robot/send?access_token=xxxxx")
-type txdx(腾讯云短信)、txdh(腾讯云电话)、alydx(阿里云短信)、alydh(阿里云电话)、hwdx(华为云短信)、rlydh(荣联云电话)、dd(钉钉)、wx(微信)、fs(飞书)
告警消息的目标类型,支持txdx(腾讯云短信)、txdh(腾讯云电话)、alydx(阿里云短信)、alydh(阿里云电话)、hwdx(华为云短信)、rlydh(荣联云电话)、dd(钉钉)、wx(微信)、fs(飞书) (default "dd")
[root@node1 ~]# /usr/lib/zabbix/alertscripts/zabbix -t $webhook地址 -m 'PrometheusAlert告警平台告警测试 ' -type dd -d http://dingding.datafountain.cn/zabbix 消息发送完成,服务器返回内容:"{\"errcode\":0,\"errmsg\":\"ok\"}"

(2) 使用PrometheusAlert本地接口进行告警---告警将转发至http://dingding.datafountain.cn/zabbix [root@node1 ~]# cd /root/PrometheusAlert/example/linux [root@node1 linux]# chmod 755 PrometheusAlert [root@node1 linux]# nohup PrometheusAlert &
[root@node1 linux]# netstat -lantp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 7580/./PrometheusAl
# 告警地址为: http://node1-ip:8080/zabbix/alert
4) 在zabbix-Server新增报警媒介 管理-->报警媒介-->创建媒介类型

# 脚本参数 -t https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxx #指定告警消息的接收目标的手机号/钉钉url/微信url,注意需要与-type参数对应
-m {ALERT.MESSAGE} #这事zabbix内置消息变量名
-type dd #告警消息的目标类型,支持txdx(腾讯云短信)、txdh(腾讯云电话)、alydx(阿里云短信)、alydh(阿里云电话)、hwdx(华为云短信)、rlydh(荣联云电话)、dd(钉钉)、wx(微信)、fs(飞书) (default "dd")
-d http://[prometheusalert-url]/zabbix/alert #PrometheusAlert的地址



5) 将新增的报警媒介分配给账户 管理-->用户-->点击需要分配的用户名-->报警媒介-->添加




6) 设置动作 配置-->动作-->创建动作

# 钉钉操作消息模板 ## [PrometheusAlert告警平台告警信息](https://zabbix.nb.cn) #### {TRIGGER.NAME}
###### 故障时间:{EVENT.DATE} {EVENT.TIME} ###### 告警级别:{TRIGGER.SEVERITY} ###### 故障前状态:{ITEM.LASTVALUE} ###### 故障事件ID:{EVENT.ID} ###### 故障主机IP:{HOST.IP} ###### 故障主机名:{HOST.NAME} ###### 故障时长:{EVENT.AGE} ###### 故障是否确认:{EVENT.ACK.STATUS}
`{EVENT.STATUS}`
![PrometheusAlert](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)



# 钉钉恢复操作模板 ## [PrometheusAlert告警平台恢复信息](https://zabbix.nb.cn) #### {TRIGGER.NAME} 已经恢复
###### 恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME} ###### 故障前状态:{ITEM.LASTVALUE} ###### 故障事件ID:{EVENT.ID} ###### 故障主机IP:{HOST.IP} ###### 故障主机名:{HOST.NAME} ###### 故障时长:{EVENT.AGE} ###### 故障是否确认:{EVENT.ACK.STATUS}
`{EVENT.STATUS}`
![PrometheusAlert](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)



# 钉钉确认消息模板 ## [PrometheusAlert告警平台确认信息](https://zabbix.nb.cn) #### {USER.FULLNAME} 已经确认故障原因
###### 确认时间:`{ACK.DATE} {ACK.TIME}` ###### 故障前状态:{ITEM.LASTVALUE} ###### 故障事件ID:{EVENT.ID} ###### 故障主机IP:{HOST.IP} ###### 故障主机名:{HOST.NAME} ###### 故障时长:{EVENT.AGE} ###### 故障原因:{ACK.MESSAGE} ###### 故障是否确认:{EVENT.ACK.STATUS}
`{EVENT.STATUS}`
![PrometheusAlert](https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png)




7) 测试钉钉告警 (1) 将zabbix-agent停止 [root@node2 ~]# systemctl stop zabbix-agent
# 请等待5分钟
# 5分钟之后,钉钉应收到故障消息

# zabbix故障查看

8) 测试恢复通知 [root@node2 ~]# systemctl start zabbix-agent
# 稍等一小会,将接收到通知

9) 更多玩法,请参看下面网址 https://gitee.com/feiyu563/PrometheusAlert
8. 添加一个监控项
1) 监控项为node2.1000cc.net的httpd服务
2) 登录Zabbix Server WEB UI==>[配置]==>[主机]==>找到node2主机








9. 主动式Agent
1) node3.1000cc.net作为主动式。已安装完成agent组件
2) 配置Zabbix Agent [root@node3 ~]# vim /etc/zabbix/zabbix_agentd.conf # 设定98行,指定Zabbix Server的IP/FQDN Server=192.168.10.11
# 设定123行,指定Zabbix Agent为主动式 StartAgents=0
# 设定139行,指定Zabbix Server的IP/FQDN ServerActive=192.168.10.11
# 设定150行,指定此Zabbix Agent的IP/FQDN Hostname=node3.1000cc.net
# 设定188行,被监控端到服务器获取监控项的周期,默认120s RefreshActiveChecks=120
# 设定205行,设置保存采集数据在内存中的容量大小 BufferSize=100
# 设定239行,设置超时时间 Timeout=3
[root@node2 ~]# systemctl enable --now zabbix-agent
3) 制作主动式模板

















4) 禁用被动监控项 [配置]==>[模板]==>[新克隆的模板名字]==>点击==>[监控项]=[找到被动监控项]==>勾选==>禁用
5) 添加主动式监控主机







 

如对您有帮助,请随缘打个赏。^-^

gold