进阶:

步骤9:在History和Events表上创建MySQL分区 ( 订阅)

Zabbix的内务处理负责删除旧的趋势和历史数据。使用SQL删除查询从数据库中删除旧数据可能会对数据库性能产生负面影响。因此,我们许多人都收到了令人讨厌的警报“ Zabbix housekeeper processes more than 75% busy”。

使用数据库分区可以轻松解决该问题。分区为每个小时或一天创建表,并在不再需要它们时将其删除。SQL DROP比DELETE语句更有效。

您可以使用此简单指南在5分钟内对MySQL表进行分区。

步骤10:优化Zabbix服务器(可选)

如果您监视的是少数设备,则无需为此优化而烦恼,但如果您计划监视大量设备,则继续执行此步骤。

打开“zabbix”服务器配置包含以下命令的文件:

“vim /etc/zabbix/zabbix_server.conf”

服务器配置“并将此配置添加到文件中的任何位置:



StartPollers=100
 StartPollersUnreachable=50
 StartPingers=50
 StartTrappers=10
 StartDiscoverers=50
 StartPreprocessors=15
 StartHTTPPollers=5
 StartAlerters=5
 StartTimers=2
 StartEscalators=2
 CacheSize=128M
 HistoryCacheSize=64M
 HistoryIndexCacheSize=32M
 TrendCacheSize=32M
 ValueCacheSize=256M



保存并退出文件(ESC , 后连续输入ZZ)。

这不是一个完美的配置,请记住,您可以优化它甚至更多。假设您不使用ICMP检查,那么将“StartPingers”参数设置为1,或者如果您不使用活动代理,则将“StartTrappers”设置为1,依此类推。您可以在官方文档中找到有关Zabbix服务器配置文件中支持的参数的更多信息。

如果您尝试启动Zabbix服务器,您将在日志“[Z3001] connection to database 'Zabbix' failed: [1040] Too many connections” in the log “/var/log/zabbix/zabbix_server.log“因为我们使用的Zabbix服务器进程超过了MySQL的处理能力。我们需要增加并发客户端连接的最大允许数量,并优化MySQL,所以请进入下一步。

步骤11:优化MySQL/MariaDB数据库(可选)

a.创建自定义MySQL配置文件

创建文件“10_my_tweaks.cnf“ ,执行 ”vim /etc/my.cnf.d/10_my_tweaks.cnf“并粘贴此配置:



[mysqld]
 max_connections                = 555
 innodb_buffer_pool_size        = 1200Minnodb-log-file-size           = 128M
 innodb-log-buffer-size         = 128M
 innodb-file-per-table          = 1
 innodb_buffer_pool_instances   = 8
 innodb_old_blocks_time         = 1000
 innodb_stats_on_metadata       = off
 innodb-flush-method            = O_DIRECT
 innodb-log-files-in-group      = 2
 innodb-flush-log-at-trx-commit = 2tmp-table-size                 = 96M
 max-heap-table-size            = 96M
 open_files_limit               = 65535
 max_connect_errors             = 1000000
 connect_timeout                = 60
 wait_timeout                   = 28800



保存并退出文件(ESC , 后连续输入ZZ),并设置正确的文件权限:



sudo chown mysql:mysql /etc/my.cnf.d/10_my_tweaks.cnf
 sudo chmod 644 /etc/my.cnf.d/10_my_tweaks.cnf


有两件事要记住!

配置参数max_connections必须大于所有Zabbix代理进程的总数加上150。您可以使用下面的命令自动检查Zabbix进程的数量,并在该数量上添加150:



egrep "^Start.+=[0-9]"  /etc/zabbix/zabbix_server.conf  |  awk -F "=" '{s+=$2} END {print s+150}'
 404



第二个最重要的参数是innodb_buffer_pool_size,它决定了MySQL可以获得多少内存来缓存innodb表和索引数据。如果服务器上只安装了数据库,则应该将该参数设置为系统内存的70%。

但是,在本例中,我们与Zabbix和Apache进程共享一个服务器,因此您应该将innodb_buffer_pool_大小设置为系统总内存的40%。这将是1600MB,因为我的CentOS服务器有4GB的RAM。

我没有任何内存问题,但是如果您的Zabbix代理由于内存不足而崩溃,请减少“innodb_buffer_pool_size”并重新启动MySQL服务器。

请注意,如果您遵循此配置,则由于新的Zabbix配置,您将在Zabbix前端收到“Too many processes on the Zabbix server”警报。增加触发阈值或关闭警报是安全的(选择“问题”选项卡→左键单击警报→选择“配置”→从“已启用”中删除复选框→点击“更新”按钮)

b. 重新启动Zabbix服务器和MySQL服务

按以下相同顺序停止和启动服务:



sudo systemctl stop zabbix-server
 sudo systemctl stop mysql
 sudo systemctl start mysql
 sudo systemctl start zabbix-server



步骤12:如何管理Zabbix/MySQL/Apache服务

有时您需要检查或重新启动Zabbix、MySQL或Apache服务–使用下面的命令来执行此操作。



Zabbix Server
 sudo systemctl <status/restart/start/stop> zabbix-serverMySQL/MariaDB Server
 sudo systemctl <status/restart/start/stop> mysqlApache Server
 sudo systemctl <status/restart/start/stop> httpdPHP FastCGI Process Manager
 sudo systemctl <status/restart/start/stop> php-fpmZabbix Agent
 sudo systemctl <status/restart/start/stop> zabbix-agent



步骤13:在Zabbix上启用和配置SELinux

虽然在实验室环境中禁用SELinux是可以接受的,但根据本地安全it团队的要求,您可能需要在生产环境中启用和配置SELinux。

在本指南的开头,我们没有完全关闭SELinux,而是设置为在许可模式下工作,这意味着它将记录所有安全错误,但不会阻止任何东西。

如果您不小心让它处于强制模式,那么您将在Zabbix前端收到“Zabbix服务器未运行:显示的信息可能不是当前的”警告,以及日志文件中的“无法设置资源限制:[13]权限被拒绝”。

不用担心,这个问题很容易解决,所以不需要进一步延迟,让我们为Zabbix配置SELinux!

a. SELinux:允许http守护程序连接到Zabbix:

启用SELinux boolean“httpd_can_connect_zabbix”,它将允许http守护程序连接到zabbix:



setsebool -P httpd_can_connect_zabbix 1



b. SELinux:允许Zabbix连接到所有TCP端口:

启用SELinux boolean“zabbix\u can\u network”,它将允许zabbix连接到所有TCP端口:



setsebool -P zabbix_can_network 1



c.将SELinux设置为在强制模式下工作

通过将SELinux设置为在强制模式下工作来启用SELinux:



setenforce 1 && sed -i 's/^SELINUX=.*/SELINUX=enforcing/g' /etc/selinux/config



并检查SELinux状态:



# sestatus
 SELinux status: enabled
 SELinuxfs mount: /sys/fs/selinux
 SELinux root directory: /etc/selinux
 Loaded policy name: targeted
 Current mode: enforcing
 Mode from config file: enforcing
 Policy MLS status: enabled
 Policy deny_unknown status: allowed
 Memory protection checking: actual (secure)
 Max kernel policy version: 31



d. 为Zabbix创建其他SELINUX策略

为了以防万一,我们将为审核日志中的每个错误创建一个附加的SELinux策略(“ /var/log/audit/audit.log”)

为此,我们将需要policycoreutils-python工具,因此请安装它:



yum install policycoreutils-python



创建一个自定义策略包:



grep "denied.*zabbix" /var/log/audit/audit.log | audit2allow -M zabbix_policy



安装自定义SELinux策略包:



semodule -i zabbix_policy.pp



做得好! 您已经为Zabbix配置了SELinux!