zabbix深入应用监控

zabbix深入应用监控

错误排查思路

​ 1.检查IP和端口

​ 2.检查firewalld和zabbix

​ 3.检查配置文件

​ 4.重载服务

​ 5.关注日志

一、zabbix如何监控Nginx

1.监控nginx的状态要怎么做?

方法一:
1.端口是否正常
2.stub_status 7种状态
1)安装nginx
2)开启stub_staus
3)获取每个状态指标
[root@db02 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@db02 zabbix_agentd.d]# vim nginx.conf
UserParameter=nginx.active,curl -s 127.0.0.1/nginx_status/ |awk '/Active/ print $NF}'
UserParameter=nginx.accepts,curl -s 127.0.0.1/nginx_status/ |awk 'NR==3 {print $1}'
UserParameter=nginx.handled,curl -s 127.0.0.1/nginx_status/ |awk 'NR==3 {print $2}'
UserParameter=nginx.request,curl -s 127.0.0.1/nginx_status/ |awk 'NR==3 {print $3}'

#重启zabbix-agent
[root@db02 zabbix_agentd.d]# systemctl restart zabbix-agent.service 

#查看
[root@db02 zabbix_agentd.d]# zabbix_agentd -p
nginx.active            
nginx.accepts                  
nginx.handled                                 
nginx.request                                 
4)将获取到的状态做成监控项
5)在web界面创建模板—>创建监控项(8次)—>创建触发器(端口是否正常)

1> 添加模板

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PcZM8rCW-1619742332715)(D:\linux\zabbix监控系统\img\image-20210317192522949.png)]

2> 添加监控项

在这里插入图片描述

3>添加触发器

在这里插入图片描述

4> 添加图形

在这里插入图片描述

5> 主机关联模板

在这里插入图片描述

方法二:
1.环境准备
服务器系统角色IP
CenOS 7.4 x86_64zabbix-server10.0.0.71
CenOS 7.4 x86_64zabbix-agent10.0.0.52
2.开启监控状态
location /nginx_status {
    stub_status on;
    access_log  off;
    allow 127.0.0.1;
    deny all;
    }
3.本地访问Nginx Status
[root@linux-node1 ~]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
 1 1 1
Reading: 0 Writing: 1 Waiting: 0
4.编写nginx的shell脚本(如果端口不一致,只需要修改脚本端口即可)
[root@Agent ~]# mkdir -p /etc/zabbix/scripts
[root@linux-node1 scripts]# vim /etc/zabbix/scripts/nginx_status.sh
#!/bin/bash
############################################################
# $Name:         nginx_status.sh
# $Version:      v1.0
# $Function:     Nginx Status
# $Author:       DriverZeng
# $organization: blog.driverzeng.com
# $Create Date:  2016-06-23
# $Description:  Monitor Nginx Service Status
############################################################

NGINX_PORT=80  #如果端口不同仅需要修改脚本即可,否则修改xml很麻烦
NGINX_COMMAND=$1


nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
}

nginx_reading(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
}

nginx_writing(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
       }

nginx_waiting(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
       }

nginx_accepts(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
       }

nginx_handled(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
       }

nginx_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
       }


  case $NGINX_COMMAND in
    active)
        nginx_active;
        ;;
    reading)
        nginx_reading;
        ;;
    writing)
        nginx_writing;
        ;;
    waiting)
        nginx_waiting;
        ;;
    accepts)
        nginx_accepts;
        ;;
    handled)
        nginx_handled;
        ;;
    requests)
        nginx_requests;
        ;;
          *)
        echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
    esac
5.给脚本添加执行权限
[root@Agent]# chmod +x /etc/zabbix/scripts/nginx_status.sh
6.配置监控项
[root@Agent ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.sh "$1"
7.重启agent端
[root@Agent ~]# systemctl restart  zabbix-agent
8.取值
[root@linux-node1 ~]# zabbix_get -s 10.0.0.52 -k nginx_status[writing]
1

二、zabbix如何监控php-fpm?

1.启用php-fpm的状态

[root@db02 ~]# vim /etc/php-fpm.d/www.conf 
pm.status_path = /phpfpm_status

#重启php
[root@db02 ~]# systemctl restart php-fpm.service 

2.根据状态,提取需要的指标

   location ~ ^/(phpfpm_status)$ {
        include fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

#重启nginx
[root@db02 ~]# systemctl restart nginx.service

3.访问测试phpfpm_status

[root@Agent ~]# curl http://127.0.0.1/phpfpm_status
pool:                 www
process manager:      dynamic
start time:           05/Jul/2016:15:30:56 +0800
start since:          409
accepted conn:        22
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 2
max children reached: 0

4.phpfpm状态解析

#PHP-FPM状态解释:
pool #fpm池名称,大多数为www
process manager #进程管理方式dynamic或者static
start time #启动日志,如果reload了fpm,时间会更新
start since #运行时间
accepted conn #当前池接受的请求数
listen queue #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
max listen queue #请求等待队列最高的数量
listen queue len #socket等待队列长度
idle processes #空闲进程数量
active processes #活跃进程数量
total processes #总进程数量
max active processes #最大的活跃进程数量(FPM启动开始计算)
max children reached #程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。

方法一:

5.编写php-fpmShell脚本(如果端口不一致,只需要修改脚本端口即可)

[root@Agent ~]# cd /etc/zabbix/scripts
[root@Agent scripts]# vim phpfpm_status.sh
#!/bin/bash
############################################################
# $Name:         phpfpm_status.sh
# $Version:      v1.0
# $Function:     Nginx Status
# $Author:       DriverZeng
# $organization: blog.driverzeng.com
# $Create Date:  2016-06-23
# $Description:  Monitor Nginx Service Status
############################################################

PHPFPM_COMMAND=$1
PHPFPM_PORT=80  #根据监听不同端口进行调整

start_since(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^start since:/ {print $NF}'
}

accepted_conn(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^accepted conn:/ {print $NF}'
}

listen_queue(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue:/ {print $NF}'
}

max_listen_queue(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max listen queue:/ {print $NF}'
}

listen_queue_len(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue len:/ {print $NF}'
}

idle_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^idle processes:/ {print $NF}'
}

active_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^active processes:/ {print $NF}'
}

total_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^total processes:/ {print $NF}'
}

max_active_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max active processes:/ {print $NF}'
}

max_children_reached(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max children reached:/ {print $NF}'
}

slow_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^slow requests:/ {print $NF}'
}

case $PHPFPM_COMMAND in
    start_since)
        start_since;
        ;;
    accepted_conn)
        accepted_conn;
        ;;
    listen_queue)
        listen_queue;
        ;;
    max_listen_queue)
        max_listen_queue;
        ;;
    listen_queue_len)
        listen_queue_len;
        ;;
    idle_processes)
        idle_processes;
        ;;
    active_processes)
        active_processes;
        ;;
        total_processes)
                total_processes;
                ;;
        max_active_processes)
                max_active_processes;
                ;;
        max_children_reached)
                max_children_reached;
                ;;
        slow_requests)
                slow_requests;
                ;;
          *)
        echo $"USAGE:$0 {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
    esac

6.给脚本添加执行权限

[root@Agent scripts]# chmod +x phpfpm_status.sh

7.监控项的phpfpm_status.conf配置文件如下

[root@Agent ~]# cat /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf
UserParameter=phpfpm_status[*],/bin/bash /etc/zabbix/phpfpm_status.sh "$1"

8.重启agent端

[root@Agent ~]# systemctl restart  zabbix-agent

9.Server端使用zabbix_get命令来获取Agent端的值

[root@ZabbixServer]# zabbix_get -s 10.0.0.52 -k phpfpm_status[accepted_conn]
45

方法二:

10.另外一种php脚本

[root@db02 zabbix_agentd.d]# vim php.sh

#!/bin/bash

php_status_file=/tmp/php_status.log
php_status_comm=$1

#将php结果输出到文件中(以减少curl请求带来过多的连接和请求数)
/usr/bin/curl -s "http://127.0.0.1:/phpfpm_status" > $php_status_file

#取accept的值
case $php_status_comm in
        accepted_conn)
                awk '/^accepted conn:/{print $NF}' $php_status_file
                ;;
         listen_queue)
                awk '/^listen queue:/{print $NF}' $php_status_file
                ;;

         max_listen_queue)
                awk '/^max_listen queue:/{print $NF}' $php_status_file
				;;

         idle_processes)
                awk '/^idle processes:/{print $NF}' $php_status_file
                ;;
        *)
        echo $"{accepted_conn|listen_queue|max_listen_queue|idle_processes}"
esac

#运行脚本
[root@zabbix zabbix_agentd.d]# sh php.sh idle_processes

#授权
[root@zabbix zabbix_agentd.d]# chmod +x php.sh 

11.运行脚本

[root@db02 zabbix_agentd.d]# vim php.conf
UserParameter=php_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/php.sh "$1"

12.在web界面创建模板—>创建监控项—>创建触发器

1)添加模板

在这里插入图片描述

2)添加监控项

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mLCEYgXi-1619742332726)(D:\linux\zabbix监控系统\img\image-20210318100600989.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQKNiCZI-1619742332727)(D:\linux\zabbix监控系统\img\image-20210318100734412.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWjLbnZL-1619742332727)(D:\linux\zabbix监控系统\img\image-20210318100849883.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JdVT1EU-1619742332728)(D:\linux\zabbix监控系统\img\image-20210318101005221.png)]

执行测试
[root@zabbix ~]# zabbix_get -s 10.0.0.52 -k net.tcp.listen[9000]
1
3)创建触发器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnJEH0GG-1619742332728)(D:\linux\zabbix监控系统\img\image-20210318101459070.png)]
在这里插入图片描述

4)添加图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOZ8FjjL-1619742332729)(D:\linux\zabbix监控系统\img\image-20210318101615228.png)]

5)主机关联模板

在这里插入图片描述

三、zabbix如何监控MySQL

percona Monitoring Plugins是一个高质量的组件,为MySQL数据库添加企业级的监控和图表功能。但其脚本使用PHP实现,故而Zabbix-Agent需要安装PHP环境。

percona工具集

1.环境准备

服务系统角色IP
CentOS 7.4 x86_64zabbix-server10.0.0.71
CentOS 7.4 x86_64zabbix-agent10.0.052

2.在zabbix-agent 端安装percona Monitoring Plugins

[root@db02 ~]# yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[root@db02 ~]# yum install percona-zabbix-templates -y

3.查看percona安装后的目录结构

[root@Agent percona]# tree /var/lib/zabbix/percona
/var/lib/zabbix/percona
├── scripts  #脚本文件路径
│   ├── get_mysql_stats_wrapper.sh
│   └── ss_get_mysql_stats.php
└── templates
    ├── userparameter_percona_mysql.conf  #key文件位置
    └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #模板文件位置

4.将自定义监控项配置文件赋值到/etc/zabbix_agentd.conf.d目录下

[root@Agent ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf  /etc/zabbix/zabbix_agentd.d/percona_mysql.conf

5.重启zabbix-agent

[root@Agent ~]# systemctl restart zabbix-agent

6.修改脚本中的MySQL用户名和密码

[root@Agent scripts]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'root';
$mysql_pass = '123';
$mysql_port = 3306;

7.在zabbix-server端上使用zabbix-get获取值(否则会失败)

[root@Server ~]# zabbix_get -s 10.0.0.7 -k MySQL.pool-read-requests
223003813

//如果获取不到值常见问题
1.看是否是MySQL密码错误
2.不要直接执行脚本来获取
3.删除/tmp/localhost-mysql_cacti_stats.txt文件
4.权限问题导致

8.导入percona模板

Zabbix页面模板选项中导入Percona模板, 模板存放在`/var/lib/zabbix/percona/templates`, 最后关联主机即可

四、zabbix如何监控redis

Redis使用自带的INFO命令,进行状态监控。以一种易于解释且易于阅读的格式,返回关于Redis服务器的各种信息和统计数值。

https://share.zabbix.com/databases/db_redis

1.环境准备

服务器系统角色IP
CentOS 7.4 x86_64zabbix-server10.0.0.71
CentOS 7.4 x86_64zabbix-agent10.0.0.52
#安装redis
[root@db02 ~]# yum install -y redis
#启动redis
[root@db02 ~]# systemctl start redis
**注意:如果不启动redis就会报错:遇到错误不要慌
Could not connect to Redis at 127.0.0.1:6379: Connection refused

#取值
[root@db02 ~]# redis-cli  info | grep connected_clients | awk -F ':' '{print $NF}'
1

方法一:

2.编写shell脚本

脚本端口,连接redis服务地址根据具体情况进行修改

AUTH认证没有开启,将PASSWD修改为空即可

[root@db02 ~]# mkdir -p /etc/zabbix/scripts
[root@db02 ~]# vim /etc/zabbix/scripts/redis_status.sh
#!/bin/bash
############################################################
# $Name:         redis_status.sh
# $Version:      v1.0
# $Function:     Redis Status
# $Author:       DriverZeng
# $organization: blog.driverzeng.com
# $Create Date:  2016-06-23
# $Description:  Monitor Redis Service Status
############################################################

R_COMMAND="$1"
R_PORT="6379"  #根据实际情况调整端口
R_SERVER="127.0.0.1"  #根据具体情况调整IP地址
PASSWD=""    #如果没有设置Redis密码,为空即可


redis_status(){
   (echo -en "AUTH $PASSWD\r\nINFO\r\n";sleep 1;) | /usr/bin/nc "$R_SERVER" "$R_PORT" > /tmp/redis_"$R_PORT".tmp
      REDIS_STAT_VALUE=$(grep "$R_COMMAND:" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
       echo "$REDIS_STAT_VALUE"
}

case $R_COMMAND in
    used_cpu_user_children)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    used_cpu_sys)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    total_commands_processed)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    role)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    lru_clock)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    latest_fork_usec)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    keyspace_misses)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    keyspace_hits)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    keys)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    expires)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    expired_keys)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    evicted_keys)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    connected_clients)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    changes_since_last_save)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    blocked_clients)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    bgsave_in_progress)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    bgrewriteaof_in_progress)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    used_memory_peak)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    used_memory)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    used_cpu_user)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    used_cpu_sys_children)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    total_connections_received)
    redis_status "$R_PORT" "$R_COMMAND"
    ;;
    *)
    echo $"USAGE:$0 {used_cpu_user_children|used_cpu_sys|total_commands_processed|role|lru_clock|latest_fork_usec|keyspace_misses|keyspace_hits|keys|expires|expired_keys|connected_clients|changes_since_last_save|blocked_clients|bgrewriteaof_in_progress|used_memory_peak|used_memory|used_cpu_user|used_cpu_sys_children|total_connections_received}"
    esac

3.redis 状态参数解读

server : Redis 服务器信息,包含以下域:
redis_version : Redis 服务器版本
redis_git_sha1 : Git SHA1
redis_git_dirty : Git dirty flag
os : Redis 服务器的宿主操作系统
arch_bits : 架构(3264 位)
multiplexing_api : Redis 所使用的事件处理机制
gcc_version : 编译 Redis 时所使用的 GCC 版本
process_id : 服务器进程的 PID
run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
tcp_port : TCP/IP 监听端口
uptime_in_seconds :Redis 服务器启动以来,经过的秒数
uptime_in_days :Redis 服务器启动以来,经过的天数
lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
clients : 已连接客户端信息,包含以下域:
connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list : 当前连接的客户端当中,最长的输出列表
client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
blocked_clients : 正在等待阻塞命令(BLPOPBRPOPBRPOPLPUSH)的客户端的数量
memory : 内存信息,包含以下域:
used_memory :Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
persistence : RDBAOF 的相关信息
stats : 一般统计信息
replication :/从复制信息
cpu : CPU 计算量统计信息
commandstats : Redis 命令统计信息
cluster : Redis 集群信息
keyspace : 数据库相关的统计信息
参数还可以是下面这两个:
all : 返回所有信息
default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。

4.添加脚本执行权限

[root@db02 ~]# chmod +x /etc/zabbix/scripts/redis_status.sh

5.zabbix权限不足的处理办法

[root@db02 ~]# rm -f /tmp/redis_6379.tmp

6.key的redis_status.conf的配置文件如下:

[root@db02 ~]# vim /etc/zabbix/zabbix_agentd.d/redis_status.conf
UserParameter=redis_status[*],/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"

7.重启zabbix-agent

[root@db02 ~]# systemctl restart zabbix-agent.service 

8.在zabbix-server使用zabbix-get获取值

[root@zabbix ~]# zabbix_get -s 10.0.0.52 -k redis_status[used_cpu_sys]
1.72

方法二:

1.导入脚本
[root@db02 ~]# vim /etc/zabbix/scripts/redis_status.sh
#!/bin/bash
REDISPATH="/usr/bin/redis-cli"
HOST="127.0.0.1"
PORT="6379"
REDIS_PA="$REDISPATH -h $HOST -p $PORT info"
if [[ $# == 1 ]];then
    case $1 in
 cluster)
        result=`$REDIS_PA|/bin/grep cluster|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 uptime_in_seconds)
        result=`$REDIS_PA|/bin/grep uptime_in_seconds|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 connected_clients)
        result=`$REDIS_PA|/bin/grep connected_clients|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 client_longest_output_list)
        result=`$REDIS_PA|/bin/grep client_longest_output_list|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 client_biggest_input_buf)
        result=`$REDIS_PA|/bin/grep client_biggest_input_buf|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 blocked_clients)
        result=`$REDIS_PA|/bin/grep blocked_clients|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
#内存
 used_memory)
        result=`$REDIS_PA|/bin/grep used_memory|awk -F":" '{print $NF}'|awk 'NR==1'`
            echo $result 
            ;; 
 used_memory_human)
        result=`$REDIS_PA|/bin/grep used_memory_human|awk -F":" '{print $NF}'|awk -F'K' '{print $1}'` 
            echo $result 
            ;; 
 used_memory_rss)
        result=`$REDIS_PA|/bin/grep used_memory_rss|awk -F":" '{print $NF}'`
            echo $result 
            ;; 
 used_memory_peak)
        result=`$REDIS_PA|/bin/grep used_memory_peak|awk -F":" '{print $NF}'|awk 'NR==1'`
            echo $result 
            ;; 
 used_memory_peak_human)
        result=`$REDIS_PA|/bin/grep used_memory_peak_human|awk -F":" '{print $NF}'|awk -F'K' '{print $1}'`
            echo $result 
            ;; 
 used_memory_lua)
        result=`$REDIS_PA|/bin/grep used_memory_lua|awk -F":" '{print $NF}'`
            echo $result 
            ;;     
 mem_fragmentation_ratio)
        result=`$REDIS_PA|/bin/grep mem_fragmentation_ratio|awk -F":" '{print $NF}'`
            echo $result 
            ;;   
#rdb
 rdb_changes_since_last_save)
        result=`$REDIS_PA|/bin/grep rdb_changes_since_last_save|awk -F":" '{print $NF}'`
            echo $result 
            ;;   
 rdb_bgsave_in_progress)
        result=`$REDIS_PA|/bin/grep rdb_bgsave_in_progress|awk -F":" '{print $NF}'`
            echo $result 
            ;;   
 rdb_last_save_time)
        result=`$REDIS_PA|/bin/grep rdb_last_save_time|awk -F":" '{print $NF}'`
            echo $result 
            ;;   
 rdb_last_bgsave_status)
        result=`$REDIS_PA|/bin/grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | /bin/grep -c ok`
            echo $result 
            ;;   
 rdb_current_bgsave_time_sec)
        result=`$REDIS_PA|/bin/grep -w "rdb_current_bgsave_time_sec" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
#rdbinfo
 aof_enabled)
        result=`$REDIS_PA|/bin/grep -w "aof_enabled" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_rewrite_scheduled)
        result=`$REDIS_PA|/bin/grep -w "aof_rewrite_scheduled" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_last_rewrite_time_sec)
        result=`$REDIS_PA|/bin/grep -w "aof_last_rewrite_time_sec" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_current_rewrite_time_sec)
        result=`$REDIS_PA|/bin/grep -w "aof_current_rewrite_time_sec" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_last_bgrewrite_status)
        result=`$REDIS_PA|/bin/grep -w "aof_last_bgrewrite_status" | awk -F':' '{print $2}' | /bin/grep -c ok`
            echo $result 
            ;; 
#aofinfo
 aof_current_size)
        result=`$REDIS_PA|/bin/grep -w "aof_current_size" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_base_size)
        result=`$REDIS_PA|/bin/grep -w "aof_base_size" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_pending_rewrite)
        result=`$REDIS_PA|/bin/grep -w "aof_pending_rewrite" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_buffer_length)
        result=`$REDIS_PA|/bin/grep -w "aof_buffer_length" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 aof_rewrite_buffer_length)
        result=`$REDIS_PA|/bin/grep -w "aof_rewrite_buffer_length" | awk -F':' '{print $2}'`
            echo $result 
            ;;   
 aof_pending_bio_fsync)
        result=`$REDIS_PA|/bin/grep -w "aof_pending_bio_fsync" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 aof_delayed_fsync)
        result=`$REDIS_PA|/bin/grep -w "aof_delayed_fsync" | awk -F':' '{print $2}'`
            echo $result 
            ;;                     
#stats
 total_connections_received)
        result=`$REDIS_PA|/bin/grep -w "total_connections_received" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 total_commands_processed)
        result=`$REDIS_PA|/bin/grep -w "total_commands_processed" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 instantaneous_ops_per_sec)
        result=`$REDIS_PA|/bin/grep -w "instantaneous_ops_per_sec" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 rejected_connections)
        result=`$REDIS_PA|/bin/grep -w "rejected_connections" | awk -F':' '{print $2}'` 
            echo $result 
            ;; 
 expired_keys)
        result=`$REDIS_PA|/bin/grep -w "expired_keys" | awk -F':' '{print $2}'`
            echo $result 
            ;; 
 evicted_keys)
        result=`$REDIS_PA|/bin/grep -w "evicted_keys" | awk -F':' '{print $2}'` 
            echo $result 
            ;; 
 keyspace_hits)
        result=`$REDIS_PA|/bin/grep -w "keyspace_hits" | awk -F':' '{print $2}'` 
            echo $result 
            ;; 
 keyspace_misses)
        result=`$REDIS_PA|/bin/grep -w "keyspace_misses" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 pubsub_channels)
        result=`$REDIS_PA|/bin/grep -w "pubsub_channels" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 pubsub_channels)
        result=`$REDIS_PA|/bin/grep -w "pubsub_channels" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 pubsub_patterns)
        result=`$REDIS_PA|/bin/grep -w "pubsub_patterns" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 latest_fork_usec)
        result=`$REDIS_PA|/bin/grep -w "latest_fork_usec" | awk -F':' '{print $2}'`
            echo $result 
            ;;           
 connected_slaves)
        result=`$REDIS_PA|/bin/grep -w "connected_slaves" | awk -F':' '{print $2}'`
            echo $result 
            ;;
 master_link_status)
        result=`$REDIS_PA|/bin/grep -w "master_link_status"|awk -F':' '{print $2}'|/bin/grep -c up`
            echo $result 
            ;;
 master_last_io_seconds_ago)
        result=`$REDIS_PA|/bin/grep -w "master_last_io_seconds_ago"|awk -F':' '{print $2}'`
            echo $result 
            ;;
 master_sync_in_progress)
        result=`$REDIS_PA|/bin/grep -w "master_sync_in_progress"|awk -F':' '{print $2}'`
            echo $result 
            ;;
 slave_priority)
        result=`$REDIS_PA|/bin/grep -w "slave_priority"|awk -F':' '{print $2}'`
            echo $result 
            ;;
#cpu
 used_cpu_sys)
        result=`$REDIS_PA|/bin/grep -w "used_cpu_sys"|awk -F':' '{print $2}'`
            echo $result 
            ;;
 used_cpu_user)
        result=`$REDIS_PA|/bin/grep -w "used_cpu_user"|awk -F':' '{print $2}'`
            echo $result 
            ;;
 used_cpu_sys_children)
        result=`$REDIS_PA|/bin/grep -w "used_cpu_sys_children"|awk -F':' '{print $2}'`
            echo $result 
            ;;
 used_cpu_user_children)
        result=`$REDIS_PA|/bin/grep -w "used_cpu_user_children"|awk -F':' '{print $2}'`
            echo $result 
            ;;
        *)
        echo "Usage:$0{uptime_in_seconds|connected_clients|client_longest_output_list|client_biggest_input_buf|blocked_clients|used_memory|used_memory_human|used_memory_rss|used_memory_peak|used_memory_peak_human|used_memory_lua|mem_fragmentation_ratio|rdb_changes_since_last_save|rdb_bgsave_in_progress|rdb_last_save_time|rdb_last_bgsave_status|rdb_current_bgsave_time_sec|aof_enabled|aof_rewrite_scheduled|aof_last_rewrite_time_sec|aof_current_rewrite_time_sec|aof_last_bgrewrite_status|aof_current_size|aof_base_size|aof_pending_rewrite|aof_buffer_length|aof_rewrite_buffer_length|aof_pending_bio_fsync|aof_delayed_fsync|rejected_connections|instantaneous_ops_per_sec|total_connections_received|total_commands_processed|expired_keys|evicted_keys|keyspace_hits|keyspace_misses|pubsub_channels|pubsub_patterns|latest_fork_usec|connected_slaves|master_link_status|master_sync_in_progress|master_last_io_seconds_ago|connected_slaves|slave_priority|used_cpu_user|used_cpu_sys|used_cpu_sys_children|used_cpu_user_children}"
        ;;
esac
#db0:key
        elif [[ $# == 2 ]];then
case $2 in
  keys)
        result=`$REDIS_PA| /bin/grep -w "db0"| /bin/grep -w "$1" | /bin/grep -w "keys" | awk -F'=|,' '{print $2}'`
            echo $result 
            ;;
 expires)
        result=`$REDIS_PA| /bin/grep -w "db0"| /bin/grep -w "$1" | /bin/grep -w "expires" | awk -F'=|,' '{print $4}'`
            echo $result 
            ;;
 avg_ttl)
        result=`$REDIS_PA|/bin/grep -w "db0"| /bin/grep -w "$1" | /bin/grep -w "avg_ttl" | awk -F'=|,' '{print $6}'`
            echo $result 
            ;;
          *)
     echo "Usage:$0{db0 keys|db0 expires|db0 avg_ttl}"
        ;;
esac
fi
2)导入配置文件
[root@db02 ~]# vim /etc/zabbix/zabbix_agentd.d/redis_status.conf

#监控redis状态,我们可以根据这个参数对应的监控项创建redis状态触发器。
UserParameter=redis.status,/usr/bin/redis-cli -h 127.0.0.1 -p 6379 ping |grep -c PONG  
#item参数如何get
UserParameter=redis_info[*], bash /etc/zabbix/zabbix_agentd.d/redis.sh $1 $2 
3)导入redis模板

在这里插入图片描述

9.关联主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z57g3lTg-1619742332732)(D:\linux\zabbix监控系统\img\image-20210318114022309.png)]

五、zabbix如何监控JVM?

在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数据

1.JMX在Zabbix中的运行流程:
1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据
2.Zabbix-Java-Gateway找Java程序(zabbix-agent)获取数据
3.Java程序返回数据给Zabbix-Java-Gateway
4.Zabbix-Java-Gateway返回数据给Zabbix-Server
5.Zabbix-Server进行数据展示
2.配置JMX监控的步骤:
1.安装Zabbix-Java-Gateway。
2.配置zabbix_java_gateway.conf参数。
3.配置zabbix-server.conf参数。
4.Tomcat应用开启JMX协议。
5.ZabbixWeb配置JMX监控的Java应用。

环境准备

服务器系统角色IP
CentOS 7.4 x86_64zabbix-server10.0.0.71
CentOS 7.4 x86_64zabbix-agent10.0.0.52
CentOS 7.4 x86_64zabbix-Java-Gateway10.0.0.10
1.安装Java以及zabbix-java-gateway

如果源码安装加上–enable-java参数

#安装java-gateway
[root@zabbix ~]# yum install  zabbix-java-gateway java-1.8.0-openjdk -y
2.配置zabbix-java-gateway
[root@zabbix ~]# vim /etc/zabbix/zabbix_java_gateway.conf 
3.启动zabbix-java-gateway
#启动zabbix-java-gateway
[root@zabbix ~]# systemctl start zabbix-java-gateway.service 
#检查端口
[root@zabbix ~]# netstat -lntp | grep 10052
4.修改zabbix-server配置文件
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf 
#java gateway地址
JavaGateway=10.0.0.7  
#java gateway默认端口10052
JavaGatewayPort=10052
#启动进程轮询java gateway
StartJavaPollers=5
5.重启zabbix-server
[root@zabbix ~]# systemctl restart zabbix-server.service 
6.安装tomcat服务
#安装tomcat
[root@zabbix ~]# wget https://repo.huaweicloud.com/apache/tomcat/tomcat-9/v9.0.10/src/apache-tomcat-9.0.10-src.tar.gz

#解压tomcat
[root@zabbix ~]# tar xf apache-tomcat-9.0.10-src.tar.gz 

#移动到指定目录
[root@zabbix ~]# mv apache-tomcat-9.0.10-src/ /soft/

#做软连接
[root@zabbix soft]# ln -s /soft/apache-tomcat-9.0.10-src/ /soft/tomcat
7.开启tomcat的远程jvm配置文件
[root@zabbix ~]# [root@zabbix soft]# vim /soft/tomcat/bin/catalina.sh 
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.71"


#配置文件详解
CATALINA_OPTS="$CATALINA_OPTS
//启用远程监控JMX
-Dcom.sun.management.jmxremote
//jmx启用远程端口,Zabbix添加时必须一致
-Dcom.sun.management.jmxremote.port=12345
//不开启用户密码认证
-Dcom.sun.management.jmxremote.authenticate=false
//不启用ssl加密传输
-Dcom.sun.management.jmxremote.ssl=false
//运行tomcat主机的IP地址
-Djava.rmi.server.hostname=10.0.0.71"
8.重启tomcat服务
[root@zabbix soft]# /soft/tomcat/bin/startup.sh 
9.添加tomcat主机
1)添加主机

在这里插入图片描述

2)添加自带模板

在这里插入图片描述

3)查看

在这里插入图片描述

10.自带的监控可能无法满足企业需求,大家可以根据公司的业务定制不同的JVM监控模板

六、zabbix内部资源结构图

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值