Centos7+zabbix7.0+postgresql安装

本教程使用centos7 搭建,因为8和9官网都有编译好的二进制安装包,centos7的没有,只能使用源码编译安装方式,后端数据库使用PostgreSQL 15 + TimescaleDB 2.15.2 时序数据库。

TimescaleDB,这是一种基于PostgreSQL的数据库解决方案,可自动将数据分为基于时间的块,以支持更快的大规模的监控性能。能以更好的性能去删除过期的监控数据和进行实时压缩数据,可节省空间。

配置PostgreSQL 15 + TimescaleDB 2.15.2 源

# 配置Postgresql 源
sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{centos})-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y
下载下配置文件后,里面有pgsql12-15版本的源,因为zabbix7.0要求PostgreSQL 13.0-16.X yum源里最高15,所以我们这里使用PostgreSQL15
修改pgdg-redhat-all.repo

```shell
[pgdg15]
name=PostgreSQL 15 for RHEL / CentOS 7 - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL7
# 配置TimescaleDB源
sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL

yum clean all
yum makecache

安装postgresql 和 timescaledb

yum  install timescaledb-2-postgresql-15 -y
# 初始化数据库
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

# 调优参数,由于我对参数并不知道如何设置,这里一路yes。
timescaledb-tune --pg-config /usr/pgsql-15/bin --max-conns=256

# 配置开机启动,并启动
systemctl enable --now postgresql-15

systemctl status postgresql-15

# 检查状态是否正常
ss -an | grep 5432

# 进入psql配置管理员密码,并退出。
sudo -u postgres psql
\password postgres
\q

# 创建zabbix用户并配置密码
sudo -u postgres createuser --pwprompt zabbix

# 创建zabbix数据库并指定所属用户为zabbix.
sudo -u postgres createdb -O zabbix zabbix

# zabbix数据库开启timescaledb扩展
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

# 导入timescaledb sql
cat /root/zabbix-7.0.6/database/postgresql/schema.sql | sudo -u zabbix psql zabbix
cat /root/zabbix-7.0.6/database/postgresql/data.sql | sudo -u zabbix psql zabbix
cat /root/zabbix-7.0.6/database/postgresql/images.sql | sudo -u zabbix psql zabbix

到这数据库安装完成

安装php+nginx

我这里使用lnmp进行的安装,安装过程不安装MySQL即可,这里有个问题gcc-c++版本低的问题,安装php8.3失败了,改为安装的php8.0 这里有个问题,php默认的安装没有开启pgsql的扩展(php -m查看),所以需要手动添加扩展。

安装php pgsql.so pgsql_pdo.so扩展

# 源码包目录,解压后进入扩展的目录
cd /root/lnmp2.1-full/src/php-8.0.30/ext/pgsql_pdo

# 在该源码目录下使用phpize工具

phpize
// 输出结果类似
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

// 配置编译,--with-php-config参数为php-config的文件目录,--with-pdo-pgsql参数为pg_config目录
// 官方文档:http://php.net/manual/en/ref.pdo-pgsql.php
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-pgsql=/usr/pgsql-15/bin/
// 配置时可能需要安装libpq插件
yum install libpqxx-dev
// 安装完libpqxx-dev插件后,重新配置,成功后进行编译
make&&make install
// 完成后,输出类似如下
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20200930

pgsql 也是一样的编译安装,然后修改php.ini

vim /usr/local/php/etc/php.ini,
去掉注释
extension=pdo_pgsql
extension=pgsql

编译安装zabbix-7.0.6

#安装依赖
yum -y install libxml2-devel net-snmp  net-snmp-devel golang libcurl-devel OpenIPMI-devel -y

 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-postgresql=/usr/pgsql-15/bin/pg_config --enable-webservice --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <https://www.zabbix.com>                   *
***********************************************************

这里安装过程存在以下问题:

编译报错,代码中使用了 EVDNS_BASE_INITIALIZE_NAMESERVERS 这个宏或常量,但是编译器找不到它的定义

你正在使用的 libevent 版本可能不包含 EVDNS_BASE_INITIALIZE_NAMESERVERS这个宏或常量

scoverer_async.o `test -f 'discoverer_async.c' || echo './'`discoverer_async.c
discoverer_async.c: In function ‘discovery_async_poller_dns_init’:
discoverer_async.c:39:76: error: ‘EVDNS_BASE_INITIALIZE_NAMESERVERS’ undeclared (first use in this function)
  if (NULL == (poller_config->dnsbase = evdns_base_new(poller_config->base, EVDNS_BASE_INITIALIZE_NAMESERVERS)))
                                                                            ^
discoverer_async.c:39:76: note: each undeclared identifier is reported only once for each function it appears in

编译安装新版本libevent

卸载libevent 
yum remove libevent
 wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar xf libevent-2.1.12-stable.tar.gz
 cd libevent-2.1.12-stable/
./configure
 make && make install

再次执行make

# make clean
# make install

编译报错,checks_snmp.c 文件中遇到了两个未声明的标识符错误:NETSNMP_CALLBACK_OP_SEC_ERROR 和 NETSNMP_CALLBACK_OP_RESEND。这些标识符通常是 Net-SNMP 库中定义的常量,当前 net-snmp的库中可能不包含

cc -std=gnu11 -DHAVE_CONFIG_H -I../../../include/common -I../../../include     -I/usr/include/libxml2   -I/usr/local/include -I/usr/lib64/perl5/CORE -I. -I/usr/include   -g -O2   -MT libzbxpoller_a-checks_snmp.o -MD -MP -MF .deps/libzbxpoller_a-checks_snmp.Tpo -c -o libzbxpoller_a-checks_snmp.o `test -f 'checks_snmp.c' || echo './'`checks_snmp.c
checks_snmp.c: In function ‘asynch_response’:
checks_snmp.c:2652:8: error: ‘NETSNMP_CALLBACK_OP_SEC_ERROR’ undeclared (first use in this function)
   case NETSNMP_CALLBACK_OP_SEC_ERROR:
checks_snmp.c:2652:8: note: each undeclared identifier is reported only once for each function it appears in
checks_snmp.c:2656:8: error: ‘NETSNMP_CALLBACK_OP_RESEND’ undeclared (first use in this function)
   case NETSNMP_CALLBACK_OP_RESEND:

编译安装新版本net-snmp

#先卸载刚才安装的旧版net-snmp
# yum autoremove -y net-snmp*
# curl -LO https://jaist.dl.sourceforge.net/project/net-snmp/net-snmp/5.9.4/net-snmp-5.9.4.zip
# unzip net-snmp-5.9.4.zip
# cd net-snmp-5.9.4
# make clean
# ./configure --prefix=/usr/local/net-snmp --with-default-snmp-version="2"
# make &&make install

#创建软连接

[root@zabbix01 net-snmp-5.9.4]# ln -s /usr/local/net-snmp/lib/* /usr/lib64/
[root@zabbix01 net-snmp-5.9.4]# ln -s /usr/local/net-snmp/lib/pkgconfig/* /usr/lib64/pkgconfig/
[root@zabbix01 net-snmp-5.9.4]# ln -s /usr/local/net-snmp/include /usr/include/net-snmp
[root@zabbix01 net-snmp-5.9.4]# ln -s /usr/local/net-snmp/bin/* /usr/bin/

再次执行make,前面卸载net-snmp的时候,OpenIPMI-devel也被卸载掉了,重装一下

# yum -y install OpenIPMI-devel
# make clean
# make install

zabbix_server安装成功

修改ui配置

vim zabbix.conf.php

$DB['TYPE']                     = 'POSTGRESQL';
$DB['SERVER']                   = '127.0.0.1';
$DB['PORT']                     = '5432';
$DB['DATABASE']                 = 'zabbix';
$DB['USER']                     = 'zabbix';
$DB['PASSWORD']                 = 'zabbix';


vim /usr/local/zabbix/etc/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=5432

添加zabbix_server zabbix_agent 服务

cp /root/zabbix-7.0.6/misc/init.d/fedora/core/zabbix_* /etc/init.d/

#这两需要修改自己真实的zabbix安装目录
# Zabbix-Directory
        BASEDIR=/usr/local/zabbix

启动服务

service zabbix_server start
service zabbix_agentd start
service php-fpm start
service nginx start

查看日志有无报错信息


发表评论

评论列表,共 0 条评论

    暂无评论