源码编译搭建LNMP环境并安装zabbix监控服务
zabbix是一个基于WEB界面的分布式监控系统,zabbix能监控各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制,让系统管理员快手定位解决存在的各种问题,
主要功能:监控CPU负载,内存使用、磁盘使用、网络状态、端口监视,日志监视、插件开发自定义。
运行机制:zabbix Server 通过SNMP、zabbix agent,ping、端口监视等方法提供对远程服务器/网络状态的监视,数据收集功能。可以在运行Linux 、Solaris、HP-UX、AIX、FreeBSD、OpenBSD、Windows等多平台运行。
zabbix_agent 安装在需要被监控的目标服务器上,主要完成对硬件信息与操作系统有关的内存,CPU、硬盘等信息的收集,功能十分强大。
zabbix_server 可以单独监视远程服务器的服务状态,同时也可以与zabbix_agent 结合,可以轮询zabbix Agent 主动接收监控数据,还可以被动接收zabbix_agent 发送的数据
如下图:
通过C/S模式采集数据,通过B/S模式在WEB端展示和配置、Agent 监控端口10050
服务端端口10051
服务端安装zbbix server 和zabbix agent两个服务,客户端只需要安装zabbix agent 一个服务,监控原理就是zabbix agent 服务从系统中获取相关数据传送给zabbix server ,然后zabbix server 服务将数据分析后以PHP页面展示出来,
注意:
zabbix服务需要LNMP为基础 LAMP=Linux+Nginx+Mysql+PHP
一、源码编译LNMP环境: 服务器IP:192.168.1.67
1,安装网络yum并更新:
yum -y install epel-release
yum clean all && yum list
2.解决LAMP编译环境依赖关系:
yum -y install make gcc gcc-c++ flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel gd freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel unzip libcap lsof
1.源码编译安装Nginx
yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre* 解决所需依赖包
useradd -M -s /sbin/nologin nginx 创建nginx运行用户
下载PCRE库 https://ftp.pcre.org/pub/pcre/
unzip pcre-8.38.zip -d /usr/local/src
Nginx官网地址:http://nginx.org/
tar zxf nginx-1.10.3.tar.gz -C /usr/local/src
./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.38 --user=nginx --group=nginx
参数说明:
-with-http_dav_module #启用支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)
默认关闭,需要编译开启
--with-http_stub_status_module #启用支持(获取Nginx上次启动以来的工作状态)
--with-http_addition_module #启用支持(作为一个输出过滤器,支持不完全缓冲,分部分相应请求)
--with-http_sub_module #启用支持(允许一些其他文本替换Nginx相应中的一些文本)
--with-http_flv_module #启用支持(提供支持flv视频文件支持)
--with-http_mp4_module #启用支持(提供支持mp4视频文件支持,提供伪流媒体服务端支持)
--with-http_ssl_module #nginx并支持ssl
make
make install
vim /usr/local/nginx/conf/nginx.conf
修改用户为nginx:
2 #user nobody;
3 user nginx nginx;
启用PHP支持
第66行始 修改为:
66 location ~ \.php$ {
67 root html;
68 fastcgi_pass 127.0.0.1:9000;
69 fastcgi_index index.php;
70 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
71 include fastcgi_params;
72 }
生成服务启动脚本
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 2
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -3 $(cat $PIDF)
;;
restart)
$0 stop &> /dev/null
if [ $? -ne 0 ] ; then continue ; fi
$0 start
;;
reload)
kill -1 $(cat $PIDF)
;;
*)
echo "Userage: $0 { start | stop | restart | reload }"
exit 1
esac
exit 0
配置服务开机启动
chmod +x /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
浏览器访问测试:
2、编译安装mysql 下载地址:https://www.mysql.com/downloads/
yum -y remove mysql #卸载系统自带的mysql
yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake #解决依赖关系
useradd -M -s /sbin/nologin -r mysql
mkdir -p /usr/local/mysql/data
tar -zxv -f mysql-5.6.35.tar.gz -C /usr/local/src/
cd !$
cd mysql-5.6.35/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_MEMORY_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DENABLED_LOCAL_INFILE=1\
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL-USER=mysql
编译的参数可以参考http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认3306
MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
MYSQL-USER:运行 mysql的用户
make
make install
chown -R mysql:mysql /usr/local/mysql/ #更改mysql属主
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf //覆盖原配置文件,并更改my.cnf数据目录位置
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld //启动脚本
vim /etc/init.d/ mysqld //更改启动脚本中指定mysql位置
basedir=
datadir=
#修改为
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
生成启动脚本
chmod 777 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
初始化数据库(必须执行)
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
启动数据库
/etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/xuegod67.cn.err'.
[ 确定 ]
设置环境变量,让系统直接调用
ln -s /usr/local/mysql/bin/* /usr/sbin/
到这里,数据库已经源码安装完成,由于在编译过程中没有配置密码项,所以登录不需要密码,
若要使用密码可以通过
/usr/local/mysql/bin/mysqladmin -u root password 'new-password' 来设置mysql密码
3、编译安装php
在Nginx中,我们使用的是php-fpm来对php页面解析,PHP-FPM其实是PHP源代码的一个补丁,指在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,再编译安装PHP后才可以使用
从PHP5.3.3开始,PHP中直接整合了PHP-FPM,所以从PHP5.3.3版本以后,不需要下载PHP-FPM补丁包了
http://php-fpm.org/download #PHP下载地址
解决依赖关系:
yum -y install php-mcrypt libmcrypt libmcrypt-devel php-pear libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel
tar zxf php-7.0.5.tar.gz-C /usr/local/src/
cd !$
cd php-7.0.18/
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/ --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
参数说明
--with-config-file-path #设置 php.ini 的搜索路径。默认为 PREFIX/lib
--with-mysql #mysql安装目录,对mysql的支持 7.0版本没有此参数
--with-mysqli #mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。是一个数据库驱动
--with-iconv-dir #种字符集间的转换
--with-freetype-dir #打开对freetype字体库的支持
--with-jpeg-dir #打开对jpeg图片的支持
--with-png-dir #打开对png图片的支持
--with-zlib #打开zlib库的支持,实现GZIP压缩输出
--with-libxml-dir=/usr #打开libxml2库的支持,libxml是一个用来解析XML文档的函数库
--enable-xml #支持xml文档
--disable-rpath #关闭额外的运行库文件
--enable-bcmath #打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-shmop #shmop共享内存操作函数,可以与c/c++通讯
--enable-sysvsem #加上上面shmop,这样就使得你的PHP系统可以处理相关的IPC函数(活动在内核级别)。
--enable-inline-optimization #优化线程
--with-curl #打开curl浏览工具的支持
--with-curlwrappers #运用curl工具打开url流 ,新版PHP5.6已弃用
--enable-mbregex #支持多字节正则表达式
--enable-fpm #CGI方式安装的启动程序,PHP-FPM服务
--enable-mbstring #多字节,字符串的支持
--with-gd #打开gd库的支持,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
--enable-gd-native-ttf #支持TrueType字符串函数库
--with-openssl #打开ssl支持
--with-mhash #支持mhash算法扩展
--enable-pcntl #freeTDS需要用到的,pcntl扩展可以支持php的多线程操作
--enable-sockets #打开 sockets 支持
--with-xmlrpc #打开xml-rpc的c语言
--enable-zip #打开对zip的支持
--enable-soap #扩展库通过soap协议实现了客服端与服务器端的数据交互操作
--with-mcrypt #mcrypt算法扩展
编译并安装:
make -j 4
make install
修改fpm配置php-fpm.conf.default文件名称
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.conf
修改运行用户和组
vim !$
user = nginx
group = nginx
复制php.ini配置文件
cp /usr/local/src/php-7.0.5/php.ini-production /usr/local/php/php.ini
复制php-fpm启动脚本到init.d
cp /usr/local/src/php-7.0.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
赋予执行权限
chmod +x /etc/init.d/php-fpm
添加为启动项
chkconfig --add php-fpm
设置开机启动
chkconfig php-fpm on
启动服务
/etc/init.d/php-fpm start
查看端口监听状态
netstat -antpu | grep php-fpm
验证PHP是否可以正常访问
vim /usr/local/nginx/html/a.php
<?php
phpinfo();
?>
到这里LAMP环境已经搭建成功,
排错,nginx无法解析PHP探针文件
在centos上成功编译安装nginx 1.4、php 5.4并成功启动nginx和php-fpm后,访问php提示"File not found.",同时在错误日志中看到:
错误解决方法:
在Nginx配置文件中找到定义调用脚本文件的地方,如:
修改成如下方式($document_root):
提示:
$document_root 代表当前请求在root指令中指定的值。如:
root /usr/local/nginx/html;
index index.php index.html index.htm;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
上面配置中的$document_root就是针对/usr/local/nginx/html目录下的php文件进行解析。
二、准备zabbix安装环境
[root@xuegod67 ~]# mysql -uroo
mysql> create database zabbix;
mysql> grant all on zabbix.* to zabbix@localhost identified by 'zabbix'; #zabbix 用户授权
tar -zxv -f zabbix-3.4.3.tar.gz -C /usr/local/src/
cd !$
cd zabbix-3.4.3/
mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sq
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sq
编译安装zabbix
groupadd zabbix
useradd -s /sbin/nologin -g zabbix zabbix
yum install -y net-snmp-devel libevent libevent-devel #解决依赖
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-libxml2
--prefix= #指定路径
--enable-server #Server 支持
--enable-agent #支持 Zabbix 客户端
--with-mysql #指定 MySql 库可以选择自定路径 mysql_config,mysql_config 是命令,用于编译 mysql 客户端程序
--with-net-snmp #支持 snmp 协议,需要安装 net-snmp-devel 包
--with-libcurl #支持 CURL 功能,libcurl 主要功能就是用不同的协议连接不同的服务器,
libcurl 当前支持的协议有 http,https,ftp,gopher,telent,dict,file,和 ldap 协议
make all
make install
配置 zabbix Server
vim /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost #默认注释掉了,直接取消注释即可
DBName=zabbix #数据库用户,我们授权的用户也是zabbix
DBUser=zabbix #默认是 root,我们授权的用户是 zabbix
DBPassword=zabbix #密码我们授权的也是 zabbix
监控zabbix本身
vim /usr/local/zabbix/etc/zabbix_agentd.conf
Server=127.0.0.1 #默认监控服务器自己,这三行不用改
ServerActive=127.0.0.1
Hostname=Zabbix server
UnsafeUserParameters=1 #允许所有的字符是在用户定义的参
启动服务
/usr/local/zabbix/sbin/zabbix_server
netstat -antup | grep zabbix 启动没报错,但是却没有进程,
查看日志显示,找不到mysql.sock,原来编译安装后的mysql.sock存在于/tmp目录下
mkdir -p /var/lib/mysql #建立所需目录
ln -s /tmp/mysql.sock /var/lib/mysql/ #链接指向文件所在目录
/usr/local/zabbix/sbin/zabbix_server
netstat -antup | grep zabbix
Zabbix默认有部分启动脚本,如果你自己也可以通过脚本的方式来实现,可以使用他的模板来实现 脚本在源码目录的 misc/init.d/下面(使用 fedora 下面的 core 即可,也可以使用 fedroa core5 的脚本均可)
cd /usr/local/src/zabbix-3.4.3/misc/init.d/
cp fedora/core/* /etc/init.d/
vim /etc/init.d/zabbix_server
BASEDIR=/usr/local/zabbix #找到此行,并修改
vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix #找到此行,并修改
编辑 php 页面控制文件
cp -r /usr/local/src/zabbix-3.4.3/frontends/php/* /usr/local/nginx/html/
重启nginx服务和php-fpm服务
/usr/local/nginx/sbin/nginx -s reload ; /etc/init.d/php-fpm restart
打开网页 192.168.1.67 安装zabbix
检测环境,发现环境检测无法通过,需要做相应调整
vim /usr/local/php/php.ini
post_max_size = 16M #修改
max_execution_time = 300 #修改
max_input_time = 300 #修改
date.timezone = Asia/Shanghai #此行有注释,去注释并修改
gettext模块,为了不影响后面的功能,现在把这个模块重新编译安装进去:
cd /usr/local/src/php-7.0.18/ext/ldap
/usr/local/php/bin/phpize
yum install openldap-devel openldap -y 解决依赖
rsync -avz /usr/lib64/libldap* /usr/lib/
./configure --with-php-config=/usr/local/php/bin/php-config --with-ldap
make && make install
vim /usr/local/php/php.ini
添加:extension=ldap.so
/etc/init.d/php-fpm restart #重启fpm
刷新页面
上图页面使用默认
mv zabbix.conf.php /usr/local/nginx/html/conf/
刷新页面进行查看,
点击 Finish,完成安装!
登陆 Zabbix 并配置 登陆之后我们修改语言 默认用户名和密码分别为 admin,zabbix
/usr/local/zabbix/sbin/zabbix_agentd start 启用agentd监控本机
到这里,zabbix服务基本上已经搭建完毕了,但是有个问题,上图的显示页面有乱码,
关于这个问题,可以直接从Windows字体目录下上传一个中文简体字体到服务器,
C:\Windows\Fonts
cd /usr/local/nginx/html/fonts/
mv DejaVuSans.ttf DejaVuSans.ttf.bak
cd
mv simsun.ttc /usr/local/nginx/html/fonts/DejaVuSans.ttf
刷新页面就发现中文显示已经恢复正常显示,
至此,zabbix监控服务器已经搭建完成,
Zabbix 启动服务总结
Nginx 服务启动
Php-fpm 服务启动
Mysql 服务器启动
测试LNMP环境正常
导入数据库、授权、源码安装zabbix
Zabbix_server 服务启动
本文来自博客园,作者:daemonlu,转载请注明原文链接:https://www.cnblogs.com/daemonlu/p/9281003.html