Zabbix项目实战
本章学习部署Discuz论坛,并通过Redis为论坛加速,最后通过zabbix监控Reids。监控MySQL。
实现步骤/技术概述:
1.部署LNMP架构
LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构.
2.上线Discuz项目到LNMP架构
Discuz!,是康盛创想科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。
Discuz! 的基础架构采用世界上流行的web编程组合PHP+MySQL实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。
3.redis为Discuz加速
Redis缓存数据库应用场景:
Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
缓存:数据查询、电商网站商品信息、新闻内容
计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
消息队列:ELK的日志缓存、部分业务的订阅发布系统
地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能
4.论坛数据统计
网站 IP: IP地址是绝对的, 1个IP是1台电脑,是从TCP链路上取的,真实的,不唯一的。
网站 UV( unique visitor ): 是指浏览您网站的实际用户, 而不是使用者所属的IP。 如果以UV作为流量统计标准,可以更加准确的了解实际上有多少个访问者来访问了相应的页面。
网站 PV( Page Views):即页面浏览量,用户24小时(0点到24点)内,每一次对网站中的网页访问均被记录一次。 网站的PV从某种程度上已成为投资者衡量商业网站表现的最重要尺度。 就像收视率之于电视。
总结: 您可以这样想 1个IP是1台电脑,1个UV是1个人。假如在一个家庭里面,两口人使用自家电脑上网,老公访问了您的网站并注册了会员,从而被记录了一次IP,之后,老婆又访问了您的网站并注册了会员,这时,您网站的流量统计系统将这样变化,IP不变、PV增加、网站UV增加1。 通常网站UV数量是大于网站IP数量的。
5.Zabbix监控MySQL
数据库在企业的架构中发挥非常重要的作用,对MySQL的性能进行监控在所难免。
1 部署LNMP架构
1.Zabbix agent 端部署LNMP架构(zabbix agent已经安装过nginx、php-fpm)
LNMP所需软件包:nginx php-fpm mariadb mariadb-server mariadb-devel php php-mysql
安装相应软件
[root@host-111 ]# yum install mariadb mariadb-server php php-mysql php-gd -y
配置数据库
#启动服务并设置服务随机自启
[root@host-111 ]# systemctl start mariadb
[root@host-111 ]# systemctl status mariadb
[root@host-111 ]# systemctl enable mariadb
#修改/etc/my.cnf配置文件支持中文
[root@host-111 ]# vim /etc/my.cnf
[mysqld]
character-set-server=utf8 #手动添加
#数据库初始化安全设置
[root@host-111 ]# mysql_secure_installation
Enter current password for root (enter for none): 回车键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password: 123456
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
#重启数据库服务
[root@host-111 ]# systemctl restart mariadb
配置nginx支持php
[root@host-111 ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; #增加index.php页面
}
location = /status {
stub_status;
}
...
location ~ \.php$ {
root /usr/share/nginx/html; #root指向的路径需要绝对路径
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #修改变量$document_root
include fastcgi_params;
}
#配置文件语法监测
[root@host-111 ~]# nginx -t
修改配置/etc/php.ini文件
[root@host-111 ]# vim /etc/php.ini #在文件最后增加以下两行参数
...
cgi.fix_pathinfo=0 #为了确保敏感文件不能被直接访问,排除PHP FPM处理的某些目录
date.timezone ="Asia/shanghai" #指定时区
修改/etc/php-fpm.d/www.conf 文件的用户与组为nginx
[root@host-111 ]# vim /etc/php-fpm.d/www.conf
...
39 user = nginx
41 group = nginx
重启服务
[root@host-111 ]# systemctl restart nginx php-fpm
测试nginx和php协同
[root@host-111 ~]# cd /usr/share/nginx/html/
[root@host-111 html]# vim phpinfo.php
<?php
phpinfo();
?>
访问:http://192.168.0.111/phpinfo.php
测试php和mysql协同
[root@host-111 ~]# cd /usr/share/nginx/html/
[root@host-111 html]# vim mysql.php
<?php
$con=mysql_connect("localhost","root","123456");
if(!$con){
die("could not connect to the db:\n".mysql_error());
}
else{
echo "success";
}
mysql_close($con);
?>
访问测试:http://192.168.0.111/mysql.php
2 上线Discuz项目
上线Discuz项目到nginx网页目录:/usr/share/nginx/html/
#解压项目代码
[root@host-111 html]# unzip Discuz_X3.3_SC_UTF8.zip
#移动页面文件到网页根目录
[root@host-111 html]# mv upload/* .
#修改网页根目录下所有项目文件的归属关系为nginx
[root@host-111 html]# chown -R nginx:nginx .
[root@host-111 html]# ll
在浏览器访问服务器地址 :http://192.168.0.111/
点击我同意
2.1 检查安装环境
如果系统环境、目录/文件权限、函数依赖检查都OK点击下一步
2.2 设置运行环境
默认全新安装:点击下一步
2.3 安装数据库
#创建数据库
mysql -uroot -p123456 -e "create database discuz;"
#授权discuz用户
mysql -uroot -p123456 -e "grant all on discuz.* to discuz@localhost identified by '123456';"
数据库成功连接后,看到如下页面
2.4 用户登录
使用管理员登录:用户名admin,密码123456
登陆后点击管理中心
输入管理员密码(密码:123456)后点击提交
点击 全局→性能优化→内存优化
默认不支持Redis加速,Discuz是php语言开发,如需通过Redis加速,需要安装php连接Redis的扩展模块。
3 Redis为Discuz加速
3.1 部署Redis程序
#安装Redis(需要epel源)
[root@host-111 html]# yum -y install redis
3.2 安装php-pecl-redis扩展模块
PECL的全称是PHP Extension Community Library,它也是PHP的扩展库。 PECL的扩展都是采用C语言编写的,可以被载入PHP中,给PHP增加额外的功能,比如PHP的Redis、MongoDB等扩展。
可提前过滤对应软件包:yum list|grep php|grep redis
#安装(需要epel源)
[root@host-111 ~]# yum -y install php-pecl-redis.x86_64
#重启php-fpm
[root@host-111 ~]# systemctl restart php-fpm
查看模块:php -m #查看所有php模块,可结合grep过滤
[root@host-111 html]# php -m | grep redis
redis
再次刷新页面可看到以支持Redis
但是现在Discuz与Redis之间还没有建立连接,接下来配置Discuz连接Redis。
3.3 Discuz连接Redis
配置文件:/usr/share/nginx/html/config/config_global.php
vim /usr/share/nginx/html/config/config_global.php
...
19 $_config['memory']['redis']['server'] = '127.0.0.1'; #指定Redis服务器地址为本机
23 $_config['memory']['redis']['requirepass'] = ''; #如果Redis有密码需指定密码
启动Redis程序
[root@host-111 html]# systemctl start redis
[root@host-111 html]# systemctl enable redis
再次刷新页面可看到Discuz已经成功与Redis连接,并且已经利用Redis存储了数据。
3.4 验证加速效果
当Redis为论坛加速后,用户在访问速度上会大大的提升,如果需要验证,可以先关闭Redis连接,查看用户在访问论坛时的耗时。
修改/usr/share/nginx/html/config/config_global.php文件,注释掉如下一行即可关闭连接
vim /usr/share/nginx/html/config/config_global.php
...
19 //$_config['memory']['redis']['server'] = '127.0.0.1';
#提示://为该文件的注释符
接下来刷新Discuz页面,再次登陆后通过全局→性能优化→内存优化可查看到已经断开连接
点击 站点首页
按键盘 F12 选择 网络 后清空一下浏览器的缓存(避免被缓存影响)随后按 F5 刷新页面,接下来按照下图点击首页文件查看耗时时间
可以看到在没有Reids加速前,首次访问耗时的等待时间为43毫秒。
接下来开启Discuz连接Redis功能再次按照上述步骤验证耗时的等待时间。
#修改配置文件取消注释
vim /usr/share/nginx/html/config/config_global.php
...
19 $_config['memory']['redis']['server'] = '127.0.0.1';
刷新Discuz论坛登录后通过 全局→性能优化→内存优化 查看Redis是否成功连接。
如以成功连接点击右上角 站点首页
按 F12 后再次清空浏览器缓存后按 F5 刷新页面后,接下来按照下图点击首页文件查看耗时时间。
可以看到在通过Reids加速前,首次访问耗时的等待时间为20毫秒。到此为止Redis以成功为Discuz加速。
如需查看Redis数据,可通过命令行进入数据库查看:
[root@host-111 ~]# redis-cli
127.0.0.1:6379> keys *
4 网站数据统计
4.1 统计工具介绍
Google Analytics、百度统计、腾讯统计、站长统计等,这类的统计都是搜索引擎等第三方公司开发的系统,在功能上和易用性上自然没话说,但是唯一一个问题就是统计数据存储放在了第三方的服务器上,对于一些保密性强的网站那就存在一定的风险了。
另外一个使用第三方的Web统计存在的问题就是不安全性,例如之前也有爆出百度统计、站长统计等JS文件有挂马以及统计服务器宕机的情况。
4.2 Matomo网站统计系统
不想用三方公司开发的统计系统,我们可以寻求自建统计系统,Piwik(后改名为:Matomo)就是一款知名度和美誉度比较高的免费开源的PHP统计系统,在功能上足以媲美三方公司开发的系统。
使用这款软件您就可以知道自己网站的数据流量情况,支持事件追踪、内容追踪、网站搜索跟踪和报告、访客地图-世界,地区,城市、实时访客世界地图、访问日志和实时分析、访客资料、网站速度和页面速度、过渡分析访问者在每个页面上的上一个和下一个动作,通过这款软件就可以快速分析网站用户情况,查看用户在您网站的内部搜索中使用了哪些搜索关键字,查看访问者使用哪些搜索类别,查看访问者在搜索后立即访问了哪些页面,软件支持媒体分析、热图、A/B测试、自定义报告、表格分析、汇总报告等。
Piwik(Matomo)支持插件,你可以通过插件扩展Piwik的功能,或者去掉一些不需要的功能,基本上可以满足中小型网站的日常统计需要。
Piwik采用PHP+MysqL构建,所以任何LNMP或者LAMP环境的Web服务器都可以运行
4.3 Matomo部署
安装Piwik要求服务器至少满足以下条件:
支持 Apache, Nginx等等.
PHP 版本至少是 5.5.9
MySQL 版本至少是 5.5 或者 MariaDB
官网推荐采用PHP 7 以上,MySQL 5.7+ 或者 MariaDB作为数据库
这里推荐采用LNMP一键安装包,支持PHP、Nginx、MysqL等最新版一键安装
到官网下载最新版的包,解压到服务器根目录下。接着用浏览器访问网站,你就可以看到Piwik的安装界面了,注意先将语言切换为中文。
Matomo官网: https://matomo.org/
安装前环境查看:
1.检查nginx、php、MySQL版本是否符合安装条件
#zabbix agent端查看
nginx -v
mysql --version
php --version
4.4 升级PHP版本
默认情况下系统自带的php版本过低,需要对php进行版本升级, php高版本的yum源地址,有两部分,其中一部分是epel-release源,另外一部分来自webtatic源。
#安装epel-release与webtaticy源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#这个清理工作命令,不一定用的上,但是为了防止centos上面发生php冲突,所以,这个命令还是先执行一下更好些
[root@host-111 ~]# yum -y remove php*
#安装php72w及其它相关扩展(w表示软件来源于webtatic-release这个镜像源,安装上没什么需要注意的,哪个快用哪个,webtatic上php版本比较全)
[root@host-111 ~]# yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-pecl-redis php72w-xml
#重启php-fpm
[root@host-111 ~]# systemctl restart php-fpm
[root@host-111 ~]# systemctl enable php-fpm
#查看php版本
[root@host-111 ~]# php --version
PHP 7.2.34
#查看php扩展模块(主要检查php连接MySQL与Redis模块)
[root@host-111 ~]# php -m
...
redis
mysqlnd
4.5 修改配置/etc/php.ini文件
[root@host-111 ]# vim /etc/php.ini #在文件最后增加以下两行参数
...
cgi.fix_pathinfo=0 #为了确保敏感文件不能被直接访问,排除PHP FPM处理的某些目录
date.timezone ="Asia/shanghai" #指定时区
修改/etc/php-fpm.d/www.conf配置文件的用户与组,并开启状态页面。
[root@host-111 ~]# vim /etc/php-fpm.d/www.conf
...
8 user = nginx
10 group = nginx
217 pm.status_path = /php_status #取消注释(默认被注释)并改名为php_status
#重启php-fpm
[root@host-111 ~]# systemctl restart php-fpm
4.6 配置matomo的站点
通过虚拟web主机方式部署matomo站点(基于域名)
创建nginx配置文件,可直接将下边内容复制到该文件:/etc/nginx/conf.d/matomo.conf
server {
listen 80;
server_name web.matomo.com; #配置访问域名
location / {
root /usr/share/nginx/matomo; #指定站点目录
index index.php index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/matomo; #指定站点目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#监测nginx语法
[root@host-111 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#重启服务
[root@host-111 matomo]# systemctl restart nginx
4.7 上线matomo项目
1.创建matomo站点目录
[root@host-111 ~]# mkdir /usr/share/nginx/matomo
2.将matomo项目上传到站点目录并解压
[root@host-111 ~]# cd /usr/share/nginx/matomo
[root@host-111 matomo]# ls
How to install Matomo.html matomo matomo-latest.zip
#移动代码到当前目录(代码在matomo目录内)
[root@host-111 matomo]# mv matomo/* .
#修改归属关系为nginx
[root@host-111 matomo]# chown -R nginx:nginx .
配置本地域名解析:C:\Windows\System32\drivers\etc
配置格式:192.168.0.111 web.matomo.com
浏览器访问测试:web.matomo.com
4.8 Matomo页面初始化
4.8.1 欢迎页面
登陆后可修改页面语言为:简体中文
现在开始点击安装!点击 下一步»
4.8.2 系统检查
Matomo将检查以确保您的服务器符合Matomo的要求。如果一切正常,您会看到一长串这样的清单:
如果有问题,Matomo会识别出问题并告诉您如何解决,例如上述示例:
[root@host-111 ~]# rm "/usr/share/nginx/matomo/How to install Matomo.html" "/usr/share/nginx/matomo/matomo-latest.zip"
Matomo建议使用HTTPS访问,在没有配置HTTPS加密网站时,该问题可以忽略!
以下两项是Matomo针对php和nginx的一些目录限制访问建议,可直接忽略。点击 下一步
4.8.3 数据库配置
为matomo创建数据库以及连接数据库用户
#创键库
[root@host-111 matomo]# mysql -uroot -p123456
MariaDB [(none)]> create database matomo;
#授权用户
MariaDB [(none)]> grant all on matomo.* to matomo@'localhost' identified by '123456';
填写表格后,单击下一步
4.8.4 超级用户
超级用户是您在安装Matomo时创建的用户。该用户具有最高权限。选择您的用户名和密码:
填写信息,然后单击下一步
4.8.5 设置网站
输入您要跟踪的第一个网站的名称和URL。安装完成后,您可以添加更多网站。
网站名称:自定义
网站网址:网址我们填写自己搭建的Discuz论坛服务器地址!
点击下一步
4.8.6 安装JavaScript跟踪标记
Matomo将向您发出一个JavaScript追踪标签。该代码必须出现在您要Matomo分析的每个页面上。
复制代码到Discuz论坛的网站第三方统计代码处。
管理中心→全局→站点信息,拉到最下边可看到网站第三方代码,复制代码,点击提交即可。
回到Matomo页面,请点击下一步
单击继续到Matomo»,然后登录到仪表板!
4.8.7 配置Matomo
首次登录会出现如下提示:
如果您的网站上正确安装了Matomo JavaScript跟踪标记,则您将收到实时分析数据。如果您没有收到任何数据,请确保已将Matomo Javascript代码复制并粘贴到您的网站页面上。
此时刷新论坛的浏览量后在查看Matomo页面会出现如下的统计信息。
到此为止,Matomo已经成功为Discuz做网站的数据统计。
5 Zabbix监控MySQL
5.1 percona简介
percona官网: https://www.percona.com/
软件下载地址: wget https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm
5.2 安装percona
[root@host-111 ~]# rpm -ivh percona-zabbix-templates-1.1.6-1.noarch.rpm
...
Scripts are installed to /var/lib/zabbix/percona/scripts #监控脚本安装路径
Templates are installed to /var/lib/zabbix/percona/templates #监控模板安装路径
#先切换到监控模板路径查看
[root@host-111 ~]# cd /var/lib/zabbix/percona/templates
[root@host-111 templates]# ls
userparameter_percona_mysql.conf #监控项配置文件
zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #监控模板文件
#将监控项配置文件移动至/etc/zabbix/zabbix_agentd.d/目录(自定义监控项目录)
[root@host-111 templates]# mv userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
导入监控模板,验证模板是否可用,回到zabbix web界面通过 配置→模板→导入 将模板文件导入。
提示:默认会出现如上图问题,应为percona提供的监控模板由于版本2.0.9过低,而zabbix4.0以后版本就不支持2.0以下的模板,需要使高版本的模板。
5.3 模板导入
模板的规则默认即可,点击 导入 可看到已导入成功
通过配置→模板查看(第4页)具体信息
5.4 配置percona连接数据库
percona监控插件是php编写,通过php连接mysql数据库来获取相关的数据。需要为percona指定连接数据库的用户与密码。
修改/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php文件指定用户与密码。
[root@host-111 ]# cd /var/lib/zabbix/percona/scripts/
[root@host-111 scripts]# ls
get_mysql_stats_wrapper.sh #获取MySQL状态脚本
ss_get_mysql_stats.php #php连接MySQL数据库脚本
#修改php脚本指定连接数据库用户与密码
[root@host-111 script]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
...
30 $mysql_user = 'root';
31 $mysql_pass = '123456';
重启zabbix agent服务
[root@host-111 script]# systemctl restart zabbix-agent
5.5 Zabbix server取值
zabbix server 端命令行取值(具体值可从/etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf监控项文件中查看)
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k MySQL.Sort-scan
0
5.6 链接模板
所有的准备工作完毕以后,回到zabbix server的web界面就可以将模板绑定到具体的主机。
配置→主机 选择你希望绑定的主机后点击 模板 后进行更新。
具体监控项信息可通过监控项中查看。
在监控项的第2页可看到一个不支持的提示,该监控项是监控MySQL主从同步状态,主要原因是zabbix用户在数据库中是不存在,所以无法获取具体的值。
如果需要监控主从同步状态,需要修改/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh脚本文件
该脚本是以zabbix用户身份在对数据库执行查看主从状态的命令,而zabbix用户在数据库中是不存在的,所以将用户改为root即可。
回到web界面查看监控项是否为已启用状态。
具体取值数据可从 监测→最新数据 中查看。到此为止MySQL监控以完成。
此时通过 监测→仪表板 查看时会发现一个问题通知,大致含义为主从状态为停止。
如果没有配置主从同步,可点击 已启用 来关闭该监控项。
评论区