作者简介
下一个就是你!
莫俊能
高级软件工程师,Zabbix工程师,熟悉Zabbix、Tivoli、Openview、Nagios、Pinpoint等监控工具,对Zabbix、Nagios有丰富的二次开发经验。有丰富的DevOps和敏捷开发经验。
1. 准备开发环境
基于Zabbix-4.0.3搭建的源码开发系统环境:
- 操作系统:CentOS Linux 7
- 开发工具:Eclipse IDE for C/C Developers , Version: Oxygen Release (4.7.0)
- Mysql:MySQL Community Server 5.7.25
- PHP:7.3.1
- Nginx:1.10.1
- Java:1.8.0_201
2. 安装开发工具环境
- 安装mysql(参考网络教程)
- 安装nginx(参考网络教程)
- 安装java(参考网络教程)
- 安装PHP 获取源码包
wget -O /root/work/php-7.3.1.tar.gz http://cn2.php.net/get/php-7.3.1.tar.gz/from/this/mirror
cd wget -O /root/work/
tar zxf php-7.3.1.tar.gz
cd php-7.3.1
编译安装
./configure --prefix=/usr/local/php7 --with-pdo-mysql=/opt/mysql --enable-mysqlnd --with-pdo-mysql=mysqlnd -with-mysqli=mysqlnd --with-mysql-sock=/tmp/mysql.sock --with-config-file-path=/usr/local/php7 --enable-fpm --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-libxml-dir --with-xmlrpc --with-openssl --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-onig --enable-pdo --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --with-pear --enable-opcache
make
make install
¤ 如对代码有任何疑问,请参考原文:点击此处
安装过程可能会遇到很多缺少依赖包的问题,百度基本都能解决的。
以下是安装PHP常见问题解决方案:
《PHP编译安装时常见错误解决办法,php编译常见错误》
3. 安装Zabbix调试环境
3.1 创建Zabbix用户账户
groupadd zabbix
useradd -g zabbix zabbix
3.2 创建Zabbix数据库
create database zabbix character set utf8 collate utf8_bin; grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix'; FLUSH PRIVILEGES; quit
3.3 导入Zabbix数据库
在Zabbix源码包下找到要导入的数据库脚本:schema.sql、images.sql、data.sql
cd /root/work/zabbix-4.0.3/database
mysql -uroot -p zabbix < schema.sql mysql -uroot -p zabbix < images.sql mysql -uroot -p zabbix < data.sql
点击查看大图
3.4 配置PHP
vi /usr/local/php7/php.ini
修改以下配置参数值:
post_max_size = 16M max_execution_time = 300 max_input_time = 300 date.timezone = Asia/Shanghai always_populate_raw_post_data = -1
3.5 配置unixODBC
ln -s /usr/lib64/libmyodbc8.so -> /usr/lib64/libmyodbc8w.so
ln -s /usr/lib64/libmysqlclient.so.18 -> /usr/lib64/mysql/libmysqlclient.so.18
创建ODBC数据源配置文件:
vi /etc/odbc.ini
[localhost]
Description = MySQL Localhost Database
Driver = MySQL
Server = 127.0.0.1
User = zabbix
Password = zabbix
Port = 3306
Database = zabbix
测试ODBC数据源配置:
isql -v localhost
如果配置成功,我们就可以操作MySQL了。执行上面的命令后,控制台输出如下:
点击查看大图
输入quit退出sql命令行。
3.6 安装zabbix前端界面
mkdir -p /home/www/zabbix
cp -rf /root/work/zabbix-4.0.3/frontends/php/* /home/www/zabbix/
chown -R nginx.nginx /home/www/zabbix
3.7 配置zabbix server配置文件
mkdir -p /usr/local/Zabbix/etc/ cp -rf /root/work/zabbix-4.0.3//conf/zabbix_agentd.conf /usr/local/Zabbix/etc/ cp -rf /root/work/zabbix-4.0.3//conf/zabbix_server.conf /usr/local/Zabbix/etc/
vi /usr/local/Zabbix/etc/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
3.8 Eclipse导入zabbix server源代码
解压Eclipse IDE for C/C Developers包,放在/root/eclipse下,如果需要创建桌面快捷方式,把eclipse文件(菱形的图标)复制到桌面,启动直接双击eclipse文件。
点击查看大图
首次启动eclipse时要配置源代码工作区间,可以自定义路径,我放在:/root/work/eclipse-workspace
3.9 导入zabbix server源代码
将源代码移至工作区间
cp -rf /root/work/zabbix-4.0.3/ /root/work/eclipse-workspace/
点击Eclipse左上角的File → Import菜单,打开导入源代码工程窗口,选择C/C → Existing code as Autotools project,如下图所示:
点击查看大图
点击图中的Next按钮,进入“Import Exiting code”窗口,点击Browse按钮,找到zabbix-4.0.3源码目录的路径,然后再选择C project language选项:
点击查看大图
点击Next按钮,进入编译和调试配置窗口,如图勾选项
点击查看大图
最后点击Finish按钮,完成源代码导入。
点击查看大图
3.10 配置编译参数
右键单击zabbix-4.0.3工程,在右键菜单中选择Properties,打开工程属性窗口,并打开Autotools → Configure Settings:
点击查看大图
在configure 找到Directory specifiers配置项,给安装的目录前缀赋值为/usr/local/Zabbix:
点击查看大图
在configure 下找到 Advanced配置项,勾选“Debug (-g)”选项,在附加命令行选项添加编译参数:
点击查看大图
点击configure节点,可以看到全部的编译配置:
点击查看大图
配置到这里,最后点击“Apply and Close”按钮保存并结束配置。
右键单击zabbix-4.0.3源码工程,选择Reconfigure Project进行构建项目,构建过程如果提示缺少依赖包,使用yum安装:
点击查看大图
构建成功控制台文末输出“Operation successful”,结果如图:
点击查看大图
右键单击zabbix-4.0.3源码工程,选择Build Project进行编译
点击查看大图
编译成功,控制台文末输出“Build Finished”,在工程的Binaries目录中看到编译得到的二进制文件:zabbix_agentd、zabbix_get、zabbix_sender、zabbix_server
点击查看大图
3.11 启动服务
在Eclipse的菜单栏中访问Run—>Run Configurations...,打开运行配置窗口,在左侧会看到四个zabbix的C/C Application:
点击查看大图
在右侧选择Argcuments,然后在Program Argcuments输入框输入配置文件参数值:-c /usr/local/Zabbix/etc/zabbix_server.conf
点击查看大图
配置完成之后,点击窗口中的Run按钮,便可以运行Zabbix Server的后台服务了。在命令行输入:
pstree zabbix -ap
就能看到server后台的进程
点击查看大图
zabbix agentd启动方法基本一致,要注意在Program Argcuments输入框输入配置文件参数值:-c /usr/local/Zabbix/etc/zabbix_agentd.conf
3.12 安装debuginfo
debuginfo-install OpenIPMI-libs cyrus-sasl-lib glibc gnutls iksemel keyutils krb5-libs libcom_err libcurl libgcc libgcrypt libgpg-error libselinux libssh2 libstdc libtasn1 libxml2-2.7.6 net-snmp-libs nspr nss nss-softokn-freebl nss-util openldap openssl unixODBC zlib
yum install ncurses-debuginfo gdbm-debuginfo
¤ 如对代码有任何疑问,请参考原文:点击此处
3.13 创建GDB初始化脚本
vi /root/work/eclipse-workspace/zabbix-4.0.3/.gdbinit
内容如下:
set schedule-multiple on
set detach-on-fork off
set print thread-events on
handle SIGPIPE nostop
set schedule-multiple on:表示所有进程的所有线程都允许运行。这个选项是必须设置的。 set detach-on-fork off:表示可以同时调试父进程和子进程。 set print thread-events on:表示当GDB发现新的线程启动或退出时,输出调试信息至控制台。 handle SIGPIPE nostop:表示当发生SIGPIPE信号时,当前进程不会停止运行。
.gdbinit文件会在Eclipse的调试器配置时使用。
3.14 调试zabbix_server
如下图所示,打开调试配置窗口:
点击查看大图
调试配置如下图:
点击查看大图
去掉“Stop on startup at main”选项的勾:在main函数的首行不要暂停执行; GDB debuger:使用gdb命令作为调试器; GDB command file:使用/root/work/eclipse-workspace/zabbix-4.0.3/.gdbinit文件作为GDB的启动命令文件; 勾选Automatically debug ...:启用多进程GDB,自动调试创建的子进程。
配置完成,点击窗口右下角的Debug按钮,即可调试Zabbix Server,在程序里打断点。
点击查看大图
3.15 调试zabbix_agentd
调试zabbix_agentd与zabbix_server的步骤基本一致。