zoukankan      html  css  js  c++  java
  • Zabbix实战--监控Nginx、MySQL与VM esxi主机、vSphere Client、JAVA应用

    Zabbix支持的主要监控方式:

    (1).Agent监控方式

    在Agent监控方式下,zabbix-agent会主动收集本机的监控信息并通过TCP协议与zabbix-server传递信息。
    Agent监控方式分为主动和被动模式。
    在被动模式下,zabbix-agent监听10050端口,等待zabbix-server的监控信息收集信息请求;
    在主动模式下,zabbix-agent收集监控信息并通过10050端口主动将数据传给zabbix-server所在服务器的10051端口。
    
    优点:
    (1)是zabbix最常用的监控方式,监测指标深入细致有针对性。
    (2)内置监控功能强大,内置监控项目丰富。
    (3)TCP方式实现通讯,可靠性也有保证。
    
    缺点:
    (1)需要在被监控机器上安装zabbix-agent客户端,部署相对麻烦,最初需要逐个机器安装代理软件
    (2)zabbix-agent客户端运行在被监控机上,会收集本机信息
    

    (2).Trapper监控方式

    Trapper监控方式使用zabbix-sender程序主动向zabbix-server发送数据。key的名称和发送的数据内容都可以灵活定义。
    发送的信息采用JSON格式,遵循zabbix-sender协议。可以自定义脚本利用zabbix-sender协议来zabbix-server发送信息。
    
    优点:
    (1)不需要在被监控机器上安装zabbix-agent
    (2)不收集被监控机器的信息
    (3)可以自定义发送的信息内容
    (4)可以使用自定义脚本发送信息
    
     缺点:
    (1)需要自定义发送的信息内容
    (2)无内置监控项目
    

    (3).SNMP监控方式

    SNMP全称Simple Network Management Protocol,即网络管理协议,包括进程管理和被管理设备两部分。
    作为一种国际通用的网络管理协议被广泛的应用于各种交换机,路由器等网络设备的管理上,而现在也越来越多被用于对服务器的监控上。
    
    优点:
    (1)服务器一旦部署SNMPAgent,任何能实现SNMP协议的软件都可以对其进行监测。
    (2)通过这种手段进行监测不需知道被监测服务器的用户名和密码,比较安全。
    
    缺点:
    (1)很多服务器并非默认安装SNMPAgent,如果通过这种方式监测则需要对所有服务器安装部署。
    (2)能监测的参数指标比较固定不够深入,无法满足用户的特殊需求。
    (3)由于SNMP协议是通过UDP方式实现的。在网络状况不佳的情况下其可靠性能以保证。
    

    (4)JMX监控方式

    JMX,全称Java Management Extensions,即Java管理拓展,是Java平台为应用程序,设备,系统等植入管理功能的框架。
    在zabbix中,JMX数据的获取由zabbix-java-gateway代理程序来负责数据的采集。
    
    优点:
    可以详细的监控各类Java程序的运行状态
    
    缺点:
    被监控机上需要安装zabbix-java-gateway
    

    (5)IPMI监控方式

    IPMI,全称Interlligent Platform Management Interface,即智能平台管理接口,原本是Intel架构中企业系统的周边设备所采用的一种工业标准,以后成为业界通用的标准。
    用户可以利用IPMI监控服务器的物理特性,如温度,电压,电扇工作状态,电源供应以及机箱等指标。
    

    实验前提:已经完成了zabbix的安装部署,以及添加server主机(zabbix-agent)

    点击此处即可查看zabbix的安装部署详细步骤

    1.自定义监控 Nginx

     在zabbix-agent端的linux服务器上的nginx的主配置文件里添加下面的配置项

    #开启nginx的统计功能
    location /nginx_status {
        stub_status on;
        access_log off;
     }
    systemctl nginx restart #刷新服务
    http://192.168.1.141/nginx_status #web方式访问,查看效果
    
    输出效果如下所示:
    Active connections: 2 
    server accepts handled requests
     18 18 23 
    Reading: 0 Writing: 1 Waiting: 1 

    状态解释: Active connections Nginx正处理的活动链接数个数;重要 server Nginx启动到现在共处理了多少个连接。 accepts Nginx启动到现在共成功创建几次握手。 handled requests Nginx总共处理了几次请求。 Reading Nginx读取到客户端的 Header 信息数。 Writing Nginx返回给客户端的 Header 信息数。 Waiting Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。 Keep-alive的情况下,Waiting这个值等于active-(reading + writing)。 请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。

    zabbix-agent的nginx参数配置文件

    [root@zabbix-client-1 zabbix_agentd.d]# cat userparameter_nginx.conf 
    UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1
    

    在zabbix-agent上的nginx监控脚本

    [root@zabbix-client-1 zabbix_agentd.d]# cat nginx.sh 
    HOST="192.168.1.141"
        PORT="80"
        function ping {
            /sbin/pidof nginx | wc -l
        }
    
        function active {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
        function reading {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
        }
        function writing {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
        }
        function waiting {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
        }
        function accepts {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
        }
        function handled {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
        }
        function requests {
            /usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
        }
    
        case $1 in
            active)
                active
                ;;
            reading)
                reading
                ;;
            writing)
                writing
                ;;
            waiting)
                waiting
                ;;
            accepts)
                accepts
                ;;
            ping)
                ping
                ;;
            handled)
                handled
                ;;
            requests)
                requests
                ;;
    esac
    chmod +x nginx.sh #.授予nginx.sh可执行权限
    systemctl restart zabbix-agent.service
    

    在zabbix-server上测试是否可以采集数据

    [root@zabbix-server-1 ~]# zabbix_get -s 192.168.111.133  -p 10050 -k nginx.status[active]
    1
    [root@zabbix-server-1 ~]# zabbix_get -s 192.168.111.133  -p 10050 -k nginx.status[active]
    3

    在zabbix-server上完成下面的操作:
    自己创建应用集,添加监控项,然后添加图形,出图
    nginx.status[active]
    nginx.status[reading]
    nginx.status[writing]
    nginx.status[waiting]
    nginx.status[accepts]
    nginx.status[handled]
    nginx.status[requests]

    创建一个监控项,添加图形
    可以将多个监控项添加到一个图形里,这样也比较好,可以对比的看效果

    添加一个触发器:

    一旦nginx服务down,马上告警

    2.自定义监控 mysql

    1.创建监控所需要的MySQL账户(MySQL服务器端)

    MariaDB [(none)]>grant usage on *.* to zabbix@192.168.10.100 identified by '123456';
    MariaDB [(none)]>flush privileges; 
     

    2.修改MySQL服务器主机配置文件(my.cnf)

    [root@ansible-control etc]# vim /etc/zabbix/.my.cnf
    
        [mysql]
        host=192.168.10.100  #IP地址为MySQL服务器端地址
        user=zabbix
        password=123456
        socket=/usr/local/mysql/tmp/mysql.sock
        [mysqladmin]
        host=192.168.10.100
        user=zabbix
        password=123456
    socket=/usr/local/mysql/tmp/mysql.sock
     

      

    3.zabbix服务器端验证zabbix代理服务端是否正常返回数据

      如果可以正常返回数字信息,则说明服务器端可以正确获取客户端信息。

    [root@zabbix-server-center /]# zabbix_get -s 192.168.10.100 -p 10050 -k "mysql.status[Uptime]"
    11027

    4.添加MySQL监控脚本

        注意监控脚本都必须放在/etc/zabbix/zabbix_agentd.d目录(存放配置文件的目录)中,因为在zabbix-agent配置文件中已经规定了,除非人为更改:

    [root@ansible-control zabbix_agentd.d]# cat userparameter_mysql.conf
    # 连接数 (有些服务器在执行时,报错找不到Mysql命令,所以要加上执行mysql的绝对路径)
    UserParameter=mysql.max_connections,echo "show variables where Variable_name='max_connections';" | HOME=/etc/zabbix /usr/local/mysql/bin/ mysql -N | awk '{print $2}'
    UserParameter=mysql.current_connections,echo "show global status where Variable_name='Threads_connected';" | HOME=/etc/zabbix /usr/local/mysql/bin/mysql -N | awk '{print $2}'
    # 缓冲池
    UserParameter=mysql.buffer_pool_size,echo "show variables where Variable_name='innodb_buffer_pool_size';" | HOME=/etc/zabbix /usr/local/mysql/bin/mysql -N |awk '{printf "%.2f",$2/1024/1024/1024}'
    UserParameter=mysql.buffer_pool_usage_percent,echo "show global status where Variable_name='Innodb_buffer_pool_pages_free' or Variable_name='Innodb_buffer_pool_pages_total';" |HOME=/etc/zabbix /usr/local/mysql/bin/ mysql -N | awk '{a[NR]=$2}END{printf "%.1f",100-((a[1]/a[2])*100)}'
    # 增删改查
    UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix /usr/local/mysql/bin/mysql -N | awk '{print $$2}'
    # 实例状态
    UserParameter=mysql.ping,HOME=/etc/zabbix /usr/local/mysql/bin/mysqladmin ping | grep -c alive
    UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V |awk -F'/' '{print $6}'

    6.重启zabbix-agent客户端

    [root@ansible-control zabbix]# systemctl restart zabbix-agent.service 

    7.使用系统自带Template DB MySQL模板进行监控

    8.查看监控图形

      (1)MySQL bandwidth

     (2)MySQL operations

    9.导入预制模板进行监控

    2.1 通过percona插件监控 MySQL (由于zabbix自带的MySQL模块的监控项太少,所以一般不使用)

    一般通过添加percona插件来监控MySQL  

    详细安装percona插件请参考:https://blog.csdn.net/weixin_43815140/article/details/106423250

    配置数据库:

    [root@ansible-control etc]# vim /etc/zabbix/.my.cnf
    
        [mysql]
        host=192.168.10.100  #IP地址为MySQL服务器端地址
        user=zabbix
        password=123456
        socket=/usr/local/mysql/tmp/mysql.sock
        [mysqladmin]
        host=192.168.10.100
        user=zabbix
        password=123456
        socket=/usr/local/mysql/tmp/mysql.sock
    #3.重启zabbix-agent
    [root@server1 zabbix]# systemctl restart zabbix-agent
    

     

    #1.安装mysql插件
    [root@server1 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm 
    warning: percona-zabbix-templates-1.1.8-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       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
    

      

    [root@server1 ~]# cd /var/lib/zabbix/percona/templates/
    [root@server1 templates]# ls
    userparameter_percona_mysql.conf
    zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
    #2.拷贝文件
    [root@server1 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
    

      

    [root@server1 templates]# cd ../scripts/
    [root@server1 scripts]# pwd
    /var/lib/zabbix/percona/scripts
    [root@server1 scripts]# ls
    get_mysql_stats_wrapper.sh  ss_get_mysql_stats.php
    #3.更改文件
    [root@server1 scripts]# vim ss_get_mysql_stats.php.cnf
    #######################
    <?php
    $mysql_user = 'root';     #数据库超户
    $mysql_pass = 'westos';   #超户密码
    

      

    #4.重启zabbix-agent
    [root@server1 scripts]# systemctl restart zabbix-agent
    

     (1).手工调用插件

    [root@server1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
    4
    [root@server1 scripts]# cd /tmp/
    [root@server1 tmp]# ls
    localhost-mysql_cacti_stats.txt
    systemd-private-931a06948b7c464dbe30bcaa2238e289-httpd.service-EugAVR
    systemd-private-931a06948b7c464dbe30bcaa2238e289-mariadb.service-4AQY0p
    systemd-private-e6b865e1f8ac4c10b3556f0ec05be7fb-httpd.service-TmCtxz
    systemd-private-e6b865e1f8ac4c10b3556f0ec05be7fb-mariadb.service-bpwqIt
    [root@server1 tmp]# cat localhost-mysql_cacti_stats.txt 
    

      

    #删除数据
    [root@server1 tmp]# rm -rf localhost-mysql_cacti_stats.txt 
    [root@server1 tmp]# ls
    systemd-private-931a06948b7c464dbe30bcaa2238e289-httpd.service-EugAVR
    systemd-private-931a06948b7c464dbe30bcaa2238e289-mariadb.service-4AQY0p
    systemd-private-e6b865e1f8ac4c10b3556f0ec05be7fb-httpd.service-TmCtxz
    systemd-private-e6b865e1f8ac4c10b3556f0ec05be7fb-mariadb.service-bpwqIt
    

    (2).zabbix自动调用插件

    1.下载模板  zbx_percona_mysql_template.xml   下载地址: http://jaminzhang.github.io/softconf/Zabbix/zbx_percona_mysql_template.xml

    2.导入模板

    3.将刚导入的模板添加到zabbix server主机中

    测试:

    查看主机,发现此时zabbix server主机的监控项变多

    3.通过JMX监控JAVA应用

    配置agent端:

    1.下载并安装jdk

    安装包:

    # jdk-8u121-linux-x64.rpm 
    [root@server2 ~]# rpm -ivh jdk-8u121-linux-x64.rpm 
    

     

    2.配置tomcat

    安装包:

    apache-tomcat-8.5.24.tar.gz 
    #1.解压apache-tomcat
    [root@server2 ~]# tar zxf apache-tomcat-8.5.24.tar.gz  -C /usr/local/
    [root@server2 ~]# cd /usr/local/
    [root@server2 local]# ls
    apache-tomcat-8.5.24  etc    include  lib64    nginx  share
    bin                   games  lib      libexec  sbin   src
    #2.制作软链接,便于升级
    [root@server2 local]# ln -s apache-tomcat-8.5.24/ tomcat
    [root@server2 local]# cd tomcat/bin
    [root@server2 bin]# pwd
    /usr/local/tomcat/bin
    #3.编写启动脚本
    [root@server2 bin]# vim catalina.sh 
    ###################
    CATALINA_OPTS='-Dcom.sun.management.jmxremote
       -Dcom.sun.management.jmxremote.port=8888
       -Dcom.sun.management.jmxremote.ssl=false
       -Dcom.sun.management.jmxremote.authenticate=false'
    
    [root@server2 bin]# pwd
    /usr/local/tomcat/bin
    [root@server2 bin]# ls
    #4.启动tamcat
    [root@server2 bin]# ./startup.sh  
    #查看端口
    [root@server2 bin]# netstat -antlp | grep 8888
    tcp6       0      0 :::8888                 :::*                    LISTEN      2880/java 
    

     

    配置java-gateway端:

    为了节省结点资源,直接将在server1结点(zabbix-server端)上部署java-gateway即可

    1.下载并安装zabbix-java-gateway

    安装包:

    zabbix-java-gateway-4.0.5-1.el7.x86_64.rpm
    [root@server1 ~]# yum install -y zabbix-java-gateway-4.0.5-1.el7.x86_64.rpm 
    
       
    

    2.开启zabbix-java-gateway

    #2.开启zabbix-java-gateway
    [root@server1 ~]# systemctl start zabbix-java-gateway
    #查看端口
    [root@server1 ~]# netstat -antlp | grep :10052
    tcp6       0      0 :::10052                :::*                    LISTEN      11567/java       
    

    3.更改配置文件

    [root@server1 ~]# cd /etc/zabbix/
    #3.编写配置文件
    [root@server1 zabbix]# vim zabbix_server.conf 
    ######################
    JavaGateway=172.25.66.1     #指定java网关(java-gateway服务器地址)
    JavaGatewayPort=10052       #指定java端口(java-gateway服务器端口)
    StartJavaPollers=5          #Java轮询器
    
    #重启zabbix-server
    [root@server1 zabbix]# systemctl restart zabbix-server
    

    配置网页:

    1.在server2主机中,添加JMX接口

    2.在server2主机中,添加Java JMX模板

     

    测试:

    1.查看主机,发现server2主机可用性栏目多了一个JMX,即视为设定成功

    2.预览图形,发现有数据,进一步验证添加java应用成功

     

     

     

     

  • 相关阅读:
    HTML知识点链接
    Apache和PHP的安装
    MySql的安装
    MY_FIRSH_MODULE
    【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)
    Atcoder Grand Contest 039B(思维,BFS)
    Codeforces Round #589 (Div. 2)E(组合数,容斥原理,更高复杂度做法为DP)
    Codeforces Round #589 (Div. 2)D(思维,构造)
    【PAT甲级】1052 Linked List Sorting (25 分)
    【PAT甲级】1051 Pop Sequence (25 分)(栈的模拟)
  • 原文地址:https://www.cnblogs.com/gucb/p/12912496.html
Copyright © 2011-2022 走看看