构建企业级监控平台系列(十一):Zabbix 配置监控 Nginx、MySQL 等常见应用

2023-10-23 19:56:02 浏览数 (1)

监控 http 服务

http是zabbix自带的监控模板。

  • step1 在server2中安装http
代码语言:javascript复制
yum install httpd -y
  • step2 配置—主机—server2
  • step3 模版—添加—Template App HTTP service—更新
  • step4 配置—模版—Template App HTTP service
  • step5 监控项—已启用

监控 nginx 服务

nginx监控项zabbix没有,需要自定义监控项。

部署nginx服务
代码语言:javascript复制
tar zxf nginx-1.16.1.tar.gz
cd nginx-1.16.1
yum install gcc pcre-devel zlib-devel -y
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make && make install

cd /usr/local/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

cd conf/
vim nginx.conf

        location /status {
                stub_status on;
                access_log off; #关闭日志记录
                allow 127.0.0.1; #只允许本机访问
                deny all;
        }
        
useradd -u 900 nginx
nginx
netstat -antlp | grep 80

注意:Nginx中的stub_status模块主要用于查看Nginx的一些状态信息。本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定:./configure –with-http_stub_status_module。更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

测试:利用curl http://127.0.0.1/status访问nginx用来做测试。

代码语言:javascript复制
curl http://127.0.0.1/status
curl http://127.0.0.1/status | grep Active
curl -s http://127.0.0.1/status | grep Active
curl -s http://127.0.0.1/status | grep Active|awk '{print $3}'
创建nginx监控项(nginx.active)
代码语言:javascript复制
cd /etc/zabbix/zabbix_agentd.d/
ls
cp userparameter_mysql.conf userparameter_nginx.conf
vim userparameter_nginx.conf 
UserParameter=nginx.active,curl -s http://127.0.0.1/status | grep Active|awk '{print $3}'

systemctl restart zabbix-agent

zabbix-server端测试是否能拿到数据:

代码语言:javascript复制
yum install zabbix-get-4.4.1-1.el7.x86_64.rpm -y
zabbix_get -s 172.25.254.3 -p 10050 -k "nginx.active"
在监控平台添加监控项
  • step1 配置—主机—server3
  • step2 监控项—创建监控项
  • step3 名称—键值—更新间隔—应用
  • step4 主机—图形—创建图形
  • step5 监控项添加—nginx_active—选择—添加
  • step6 配置—主机—server-2–图形—预览

字体乱码需要参考前面的配置进行相关的修改即可。

创建nginx监控项(nginx.accept)
代码语言:javascript复制
curl -s http://127.0.0.1/status | awk NR==3
curl -s http://127.0.0.1/status | awk NR==3 | awk '{print $1}'
ls
vim userparameter_nginx.conf 
UserParameter=nginx.accept,curl -s http://127.0.0.1/status | awk NR==3 | awk '{print $1}'
systemctl restart zabbix-agent

zabbix-server端测试是否能拿到数据:

代码语言:javascript复制
zabbix_get -s 172.25.254.3 -p 10050 -k "nginx.accept"
监控平台添加监控项
  • step1 配置—主机—server3
  • step2 监控项—创建监控项
  • step3 名称—键值—更新间隔—应用
  • step4 主机—图形—nginx_status
  • step5 监控项添加—nginx_accept—选择—添加
  • step6 配置—主机—server3—图形—预览

更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

监控 MySQL 服务

配置 mysql
代码语言:javascript复制
mkdir /var/lib/zabbix
mysqladmin -uzabbix -p123 -h 127.0.0.1 ping
mysqladmin -uzabbix -p123 -h 127.0.0.1 ping | grep -c alive
cd /var/lib/zabbix
vim .my.cnf
[mysql]
host = localhost
user = root
password = 123
socket = /var/lib/mysql/mysql.sock

[mysqladmin]
host = localhost
user = root
password = 123
socket = /var/lib/mysql/mysql.sock

systemctl restart zabbix-agent
安装 percona-zabbix 模版

percona需要php环境

代码语言:javascript复制
yum -y install php php-mysql
代码语言:javascript复制
wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm 
[root@localhost~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
警告:percona-zabbix-templates-1.1.8-1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:percona-zabbix-templates-1.1.8-1 ################################# [100%]

Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates

进入安装目录会发现有2个目录,一个是脚本目录,一个是模版目录。

代码语言:javascript复制
[root@localhost~]# cd /var/lib/zabbix/percona/
[root@localhost percona]# tree
.
├── scripts
│   ├── get_mysql_stats_wrapper.sh
│   └── ss_get_mysql_stats.php
└── templates
    ├── userparameter_percona_mysql.conf
    └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

其中脚本目录里有2个脚本,用来获取数据库信息

代码语言:javascript复制
[root@localhost percona]# cd scripts/
[root@localhost scripts]# ls
get_mysql_stats_wrapper.sh  ss_get_mysql_stats.php

修改get_mysql_stats_wrapper.sh

代码语言:javascript复制
#修改get_mysql_stats_wrapper数据库登陆信息,第19行添加mysql账号密码。

sed -n '19p' get_mysql_stats_wrapper.sh RES=`HOME=~zabbix mysql -uroot -p123 -e 'SHOW SLAVE STATUSG' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr 'n' 

复制自定义监控项配置文件到zabbix目录

代码语言:javascript复制
cd /var/lib/zabbix/percona/
cd templates/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/ #拷贝userparameter_percona_mysql.conf文件到被监控的mysql服务器上

修改ss_get_mysql_stats.php

代码语言:javascript复制
cd ..
cd scripts/
vim ss_get_mysql_stats.php.cnf #由于percona的监控脚本是使用php写的,所以需要准备好php运行环境,将zabbix的数据库和密码写入php脚本中
<?php
$mysql_user = 'root';
$mysql_pass = '123';

systemctl restart zabbix-agent

测试percona的脚本:

代码语言:javascript复制
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gk #测试脚本
cat /tmp/localhost-mysql_cacti_stats.txt #查看监控项  

更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

导入模板
  • step1 配置—模版—导入
  • step2 选择导入模版路径—聚合图形—导入
  • step3 配置—主机—zabbix server
  • step4 模版—更新—选择
  • step5 配置—主机—zabbix server—图形—预览
监控 MySQL 主从状态
zabbix客户端监控脚本和监控项配置

我们可以通过以下命令来判定MySQL主从同步的状态:

代码语言:javascript复制
mysql -uroot -proot -e "show slave statusG" | grep  Slave_IO_Running | awk '{print $2}'
mysql -uroot -proot -e "show slave statusG" | grep  Slave_SQL_Running | awk '{print $2}'

执行结果如下:

可以看出,在主从同步成功的情况下,这两条命令返回的结果都是Yes,因此,我们据此可以编写脚本如下:

代码语言:javascript复制
#!/bin/bash
# 2022年3月27日 22:21:18
# Authored by pzz
# Used to test the MySQL Replication
IO=`mysql -uroot -proot -e "show slave statusG" | grep  Slave_IO_Running | awk '{print $2}'`
SQL=`mysql -uroot -proot -e "show slave statusG" | grep  Slave_SQL_Running | awk '{print $2}'`

if [ $IO == "Yes" -a $SQL == "Yes" ];then
        echo 1
else
        echo 0
fi

编写zabbix的监控项配置如下:

代码语言:javascript复制
UserParameter=mysql.rep,/usr/local/zabbix/scripts/mysql_rep.sh

上述操作完成后,我们在zabbix服务端测试一下我们编写的监控项,结果如下:

可以看出,zabbix监控项配置成功!更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

zabbix web配置

在完成上述配置后,我们可以依次进行添加zabbix主机——模板——监控项——触发器——动作

效果检验

最后,让我们检验一下配置的成果。登录MySQL从库后,执行命令:

代码语言:javascript复制
stop slave

发现zabbix出现告警,如下所示:

与此同时,邮箱里面收到了zabbix的告警邮件,如下所示:

综上,我们的zabbix监控MySQL主从状态实战配置成功!

监控MySQL性能

通过在zabbix客户端编写脚本,实现对MySQL数据库的性能进行信息进行提取,并配置成zabbix的监控项,以实现zabbix对MySQL性能的监控,最终实现把MySQL数据库的性能通过图形的形式表现出来。

Agent脚本编写

在zabbix客户端上,我们已经安装好了MySQL和zabbix。如何获得MySQL的性能参数呢,我们可以通过执行命令:

代码语言:javascript复制
mysqladmin -uroot -proot status

来初步判定MySQL的性能,该命令执行结果如下:

或者是执行命令:

代码语言:javascript复制
mysqladmin -uroot -proot extended-status

该命令执行结果如下:

在该命令执行后,我们还可以通过awk命令来把具体参数的内容进行提取。下面,我们来提取MySQL数据库的Uptime、Threads、Slow Queries、Queries per second avg和五个参数,可以分别执行命令:

代码语言:javascript复制
mysqladmin -uroot -proot status |  awk '{print $2}'
mysqladmin -uroot -proot status |  awk '{print $4}'
mysqladmin -uroot -proot status |  awk '{print $9}'
mysqladmin -uroot -proot status |  awk '{print $22}'
mysqladmin -uroot -proot extended-status | grep "Bytes_sent" | awk '{print $4}'

上述命令执行结果如下:

这样,我们就可以将这些性能具体提取出来了,接下来,我们来编写一下zabbix客户端的脚本。脚本内容如下:

代码语言:javascript复制
#!/bin/bash
# 2022年3月27日 20:22:32
# Authoed by pzz
# Used to get the MySQL parameter
CONNECTION1="mysqladmin -uroot -proot status"
CONNECTION2="mysqladmin -uroot -proot extended-status"
if [ $# -ne 1 ];then
        echo "arg error,there should be one arg!"
else
        case $1 in
                uptime)
                        result=`$CONNECTION1 | awk '{print $2}'`
                        ;;
                threads)
                        result=`$CONNECTION1 | awk '{print $4}'`
                        ;;
                slow_queries)
                        result=`$CONNECTION1 | awk '{print $9}'`
                        ;;
                avg_time)
                        result=`$CONNECTION1 | awk '{print $22}'`
                        ;;
                bytes_sent)
                        result=`$CONNECTION2 | grep "Bytes_sent" |awk '{print $4}'`
                        ;;
                *)
                        echo "Usage:$0(uptime|threads|slow_queries|avg_time|bytes_sent)"
        esac
        echo $result
fi

脚本完成后,我们来测试一下脚本的可行性,结果如下:

可以看出,我们编写的脚本工作正常,可以运行并检测MySQL的一些性能参数。然后我们在zabbix server端上测试一下,结果如下:

可以看出,zabbix server端也运行正常。更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

zabbix web端配置

接下来,我们就可以进行zabbix web端的配置了。大致流程如下:添加模板——添加监控项——将模板添加到主机上——添加图形。

选择配置——主机,点击图形,如下所示:

进入图形页面后,点击右上角的添加图形页面,并填写名称、以及监控项等内容,结果如下:

完成上述添加后,我们点击下方的“添加”就可以把刚才我们的自定义图形添加上去了,添加完成后的页面如下所示:

图形查看

最后,我们来查看一下刚才配置的结果。进入监控——图形页面,选择我们要监控的图形,结果如下:

可以看出,我们已经能够通过自定义的监控项来显示图形了,我们的zabbix监控MySQL性能实战成功!

使用 JMX 监控tomcat

安装tomcat和jdk

在server2(agent的客户端)上安装tomcat和jdk,并打开tomcat:

代码语言:javascript复制
rpm -ivh jdk-8u121-linux-x64.rpm 
tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-tomcat-8.5.24 tomcat
vim /usr/local/tomcat/bin/catalina.sh #向tomcat中添加JMX的参数 

CATALINA_OPTS='-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888 #监听端口号,方便远程访问
-Dcom.sun.management.jmxremote.ssl=false #是否对连接开启SSL加密,默认开启
-Dcom.sun.management.jmxremote.authenticate=false' #是否需要开启用户认证,默认开启

补充:JMX全称Java Management Extensions, 为Java应用提供管理扩展功能

代码语言:javascript复制
cd tomcat/
cd bin/
./startup.sh #启动tomcat
安装zabbix-java-gateway

server1(server端)安装zabbix-java-gateway,并做相应配置:

代码语言:javascript复制
yum install zabbix-java-gateway-4.4.1-1.el7.x86_64.rpm -y
systemctl start zabbix-java-gateway
netstat -antlp | grep 10052
vim /etc/zabbix/zabbix_server.conf 
288 JavaGateway=172.25.254.1
296 JavaGatewayPort=10052
304 StartJavaPollers=5
systemctl restart zabbix-server
zabbix监控界面进行相应设置
  • step1 配置—主机—server2
  • step2 JMX接口—更新
  • step3 配置—主机—模版—取消链接并清理
  • step4 配置—主机—模版—添加—Java JMX—更新
  • step5 查看到server2此时JMX图标为灰色
  • step6
代码语言:javascript复制
vim /etc/zabbix/zabbix_java_gateway.conf 

  9 LISTEN_IP="172.25.254.1"
 17 LISTEN_PORT=10052
 35 START_POLLERS=5

systemctl restart zabbix-java-gateway
  • step7 刷新—查看到server2此时JMX图标为绿色

更多关于企业级监控平台系列的学习文章,请参阅:构建企业级监控平台,本系列持续更新中。

参考:https://blog.csdn.net/nigar_/article/details/ 104947833 https://blog.csdn.net/nigar_/article/ details/104965706 https://blog.csdn.net/ weixin_40228200/article/details/123782914

0 人点赞