zabbix 6.0 自定义监控redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/etc/zabbix/zabbix_agent2.d/redis_status.sh
#! /bin/bash
REDISCLI="/usr/local/redis/src/redis-cli"
HOST="127.0.0.1"
PORT=6379
case $1 in
# 获取 Redis 的版本号。
version)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "redis_version" | awk -F':' '{print $2}'`
echo $result
;;
uptime)
# 获取 Redis 服务器运行的秒数。
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "uptime_in_seconds" | awk -F':' '{print $2}'`
echo $result
;;
# 获取当前连接到 Redis 服务器的客户端数量。
connected_clients)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "connected_clients" | awk -F':' '{print $2}'`
echo $result
;;
# 获取当前被阻塞的客户端数量。
blocked_clients)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "blocked_clients" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 使用的内存量。
used_memory)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_memory" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 使用的 RSS(Resident Set Size)内存,表示 Redis 在操作系统层面实际占用的物理内存。
used_memory_rss)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_memory_rss" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 使用的内存峰值。
used_memory_peak)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_memory_peak" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis Lua 脚本执行时使用的内存。
used_memory_lua)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_memory_lua" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 在系统级别(内核态)消耗的 CPU 时间。
used_cpu_sys)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_sys" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 在用户态消耗的 CPU 时间。
used_cpu_user)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_user" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 所有子进程在系统态消耗的 CPU 时间。
used_cpu_sys_children)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_sys_children" | awk -F':' '{print $2}'`
echo $result
;;
# 获取 Redis 所有子进程在用户态消耗的 CPU 时间。
used_cpu_user_children)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_user_children" | awk -F':' '{print $2}'`
echo $result
;;
# 检查最近一次 RDB 持久化操作的状态是否成功。
rdb_last_bgsave_status)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | grep -c ok`
echo $result
;;
# 检查最近一次 AOF 重写操作的状态是否成功。
aof_last_bgrewrite_status)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "aof_last_bgrewrite_status" | awk -F':' '{print $2}' | grep -c ok`
echo $result
;;
# 检查最近一次 AOF 写操作的状态是否成功。
aof_last_write_status)
result=`$REDISCLI -h $HOST -p $PORT info | grep -w "aof_last_write_status" | awk -F':' '{print $2}' | grep -c ok`
echo $result
;;
esac


/etc/zabbix/zabbix_agent2.d/redis_status.conf
UserParameter=redis_status[*],bash /etc/zabbix/zabbix_agent2.d/redis_status.sh $1
UserParameter=redis_ping,/usr/local/redis/src/redis-cli PING|grep -c "PONG" | wc -l

# 重启客户端工具
[root@web09 zabbix_agent2.d]# systemctl restart zabbix-agent2


# 测试
[root@web09 zabbix_agent2.d]# zabbix_agent2 -t redis_status[uptime]
redis_status[uptime] [s|2698]

[root@web09 zabbix_agent2.d]# zabbix_agent2 -t redis_status[version]
redis_status[version] [s|6.2.7]

[root@web09 zabbix_agent2.d]# zabbix_agent2 -t redis_ping
redis_ping

[root@zabbix-server ~]# zabbix_get -s 192.168.100.90 -p 10050 -k redis_status[version]
6.2.7

zabbix 6.0 自定义监控mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/etc/zabbix/zabbix_agent2.d/mysql_check.sh
#!/bin/bash
# 用户名(确保有这个用户)
MYSQL_USER='zabbix'

# 密码
MYSQL_PWD='zabbix'

# 主机地址/IP 下面这个写法是agent 和 数据库在同台机器上
MYSQL_HOST='127.0.0.1'

# 端口
MYSQL_PORT='3306'

# 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"

if [ $# -ne "1" ];then
echo "arg error!"
fi

# 获取数据
case $1 in
# 获取 MySQL 数据库运行的时间(以秒为单位)。
Uptime)
result=`${MYSQL_CONN} status 2>/dev/null |cut -f2 -d":"|cut -f1 -d"T"`
echo $result
;;
# 获取执行 UPDATE 语句的次数。
Com_update)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_update"|cut -d"|" -f3`
echo $result
;;
# 获取执行时间超过 long_query_time 配置的慢查询的次数。
Slow_queries)
result=`${MYSQL_CONN} status 2>/dev/null |cut -f5 -d":"|cut -f1 -d"O"`
echo $result
;;
# 获取执行 SELECT 语句的次数。
Com_select)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_select"|cut -d"|" -f3`
echo $result
;;
# 获取执行 ROLLBACK 事务的次数。
Com_rollback)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_rollback"|cut -d"|" -f3`
echo $result
;;
# 获取自数据库启动以来处理的查询总数。
Questions)
result=`${MYSQL_CONN} status 2>/dev/null |cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;
# 获取执行 INSERT 语句的次数。
Com_insert)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_insert"|cut -d"|" -f3`
echo $result
;;
# 获取执行 DELETE 语句的次数。
Com_delete)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_delete"|cut -d"|" -f3`
echo $result
;;
# 获取执行 COMMIT 事务的次数。
Com_commit)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_commit"|cut -d"|" -f3`
echo $result
;;
# 获取 MySQL 服务器发送的字节总数。
Bytes_sent)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_sent" |cut -d"|" -f3`
echo $result
;;
# 获取 MySQL 服务器接收的字节总数。
Bytes_received)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_received" |cut -d"|" -f3`
echo $result
;;
# 获取执行 BEGIN 事务的次数。
Com_begin)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_begin"|cut -d"|" -f3`
echo $result
;;
*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac



/etc/zabbix/zabbix_agent2.d/mysql_check.conf
UserParameter=mysql_check[*],bash /etc/zabbix/zabbix_agent2.d/mysql_check.sh $1

# 重启客户端工具
[root@web09 zabbix_agent2.d]# systemctl restart zabbix-agent2

# 测试
[root@web09 zabbix_agent2.d]# zabbix_agent2 -t mysql_check[Uptime]
mysql_check[Uptime] [s|638]

[root@zabbix-server ~]# zabbix_get -s 192.168.100.90 -p 10050 -k mysql_check[Uptime]
640

zabbix 6.0 自定义监控mysql主从状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/etc/zabbix/zabbix_agent2.d/mysql_slave_status.sh
#!/bin/bash
a=`mysql -u root -p1 -e "SHOW SLAVE STATUS\G" 2>/dev/null |awk -F' ' 'NR==12{print $2}'`
b=`mysql -u root -p1 -e "SHOW SLAVE STATUS\G" 2>/dev/null |awk -F' ' 'NR==13{print $2}'`
if [ $a = 'Yes' -a $b = 'Yes' ];
then
echo 1
else
echo 0
fi

/etc/zabbix/zabbix_agent2.d/mysql_slave_status.conf
UserParameter=mysql_slave_status,bash /etc/zabbix/zabbix_agent2.d/mysql_slave_status.sh

# 重启客户端工具
[root@web09 zabbix_agent2.d]# systemctl restart zabbix-agent2

# 测试
[root@web09 zabbix_agent2.d]# zabbix_agent2 -t mysql_slave_status
mysql_slave_status [s|1]

[root@zabbix-server ~]# zabbix_get -s 192.168.100.90 -p 10050 -k mysql_slave_status
1

zabbix 6.0 自定义监控nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#nginx服务开启状态模块
server {
listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /status {
stub_status on;
}
}
$ nginx -t
$ systemctl reload nginx

/etc/zabbix/zabbix_agent2.d/nginx_status.sh
#!/bin/bash
# nginx status模块状态监控

Active () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==1 {print $3}'
}
Accept () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==3 {print $1}'
}
Handled () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==3 {print $2}'
}
Requests () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==3 {print $3}'
}
Reading () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==4 {print $2}'
}
Writing () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==4 {print $4}'
}
Waiting () {
wget --quiet -O - http://localhost/status?auto | awk 'NR==4 {print $6}'
}
$1

/etc/zabbix/zabbix_agent2.d/nginx_status.conf
UserParameter=nginx_status[*],/etc/zabbix/zabbix_agent2.d/nginx_status.sh $1

# 重启客户端工具
[root@test01 ~]# systemctl restart zabbix-agent2

# 赋予脚本执行权限
[root@test01 ~]# chmod +x /etc/zabbix/zabbix_agent2.d/nginx_status.sh

# 测试脚本
[root@test01 ~]# bash /etc/zabbix/zabbix_agent2.d/nginx_status.sh Accept
1188
# 服务端测试抓取客户端自定义监控指标
[root@zabbix-server ~]# zabbix_get -s 192.168.100.90 -k "nginx_status[Accept]"
2166

zabbix 6.0 自定义监控JVM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
安装tomcat
如果是编译安装就直接在以下文件中添加即可!
如果是yum安装就在/usr/libexec/tomcat/server这个文件中添加
可以通过systemctl cat tomcat来查看
ExecStart=/usr/libexec/tomcat/server

[root@java-web01 bin]# vim /usr/local/tomcat/bin/catalina.sh
#需添加的内容
CATALINA_OPTS=" \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=12345 \
-Djava.rmi.server.hostname=192.168.100.90"

添加完后重启tomcat,然后查看12345端口有没有放开,没放开说明配置有问题!


以下是上边添加内容的含义:
-Dcom.sun.management.jmxremote # 启用 JMX 远程管理功能。启用该选项后,JVM 将允许远程连接进行监控和管理。
-Dcom.sun.management.jmxremote.authenticate=false # 禁用 JMX 远程管理的认证功能。默认情况下,JMX 远程访问是需要身份验证的
-Dcom.sun.management.jmxremote.ssl=false # 禁用 JMX 远程管理的 SSL 加密功能。
-Dcom.sun.management.jmxremote.port=12345 # JMX对外暴露端口号
-Djava.rmi.server.hostname=192.168.100.90 # java实例主机IP, 客户端将连接到该 IP 地址进行 JMX 操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#zabbix-server端
[root@zabbix-server ~]# yum install -y zabbix-java-gateway
# zabbix-java-gateway配置
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_java_gateway.conf
17:LISTEN_PORT=10052
27:PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"

以上两步其实不是非要在server端操作,也可以在安装tomcat的服务器上操作。如果在tomcat机器上操作,以下的
JavaGateway就不能写127.0.0.1,需要写安装tomcat的服务器的IP。


[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
# JavaGate 客户端地址
JavaGateway=127.0.0.1
# JavaGate 端口号
JavaGatewayPort=10052
# JavaGate启动进程数
StartJavaPollers=5

[root@zabbix-server ~]# systemctl enable --now zabbix-java-gateway
[root@zabbix-server ~]# systemctl restart zabbix_server
[root@zabbix-server ~]# ls
cmdline-jmxclient-0.10.3.jar
# 测试
[root@zabbix-server ~]# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.100.130:12345
Catalina:port=8080,type=Mapper
java.lang:type=Runtime
java.lang:name=PS Scavenge,type=GarbageCollector
Catalina:port=8009,type=Connector
java.nio:name=mapped,type=BufferPool
Catalina:name="http-bio-8080",type=GlobalRequestProcessor
Catalina:host=localhost,name=AccessLogValve,type=Valve
java.lang:name=Compressed Class Space,type=MemoryPool
java.util.logging:type=Logging
java.lang:type=Compilation
Catalina:port=8009,type=Mapper
JMImplementation:type=MBeanServerDelegate
java.lang:type=ClassLoading
com.sun.management:type=HotSpotDiagnostic
Catalina:type=NamingResources
java.lang:name=CodeCacheManager,type=MemoryManager
Catalina:host=localhost,name=StandardHostValve,type=Valve
Catalina:realmPath=/realm0/realm0,type=Realm
Catalina:type=Service
java.nio:name=direct,type=BufferPool
Catalina:name="ajp-bio-8009",type=ThreadPool
java.lang:name=PS MarkSweep,type=GarbageCollector
com.sun.management:type=DiagnosticCommand
java.lang:type=Memory
Catalina:type=MBeanFactory
Catalina:port=8080,type=ProtocolHandler
java.lang:name=Metaspace,type=MemoryPool
java.lang:name=PS Old Gen,type=MemoryPool
Catalina:name=StandardEngineValve,type=Valve
Catalina:name="ajp-bio-8009",type=GlobalRequestProcessor
Catalina:port=8009,type=ProtocolHandler
java.lang:type=Threading
Catalina:realmPath=/realm0,type=Realm
Catalina:name="http-bio-8080",type=ThreadPool
java.lang:name=PS Eden Space,type=MemoryPool
jdk.management.jfr:type=FlightRecorder
Catalina:host=localhost,type=Deployer
Catalina:class=org.apache.catalina.UserDatabase,name="UserDatabase",resourcetype=Global,type=Resource
java.lang:name=PS Survivor Space,type=MemoryPool
Catalina:type=Server
Users:database=UserDatabase,type=UserDatabase
java.lang:type=OperatingSystem
Catalina:type=StringCache
java.lang:name=Metaspace Manager,type=MemoryManager
Catalina:port=8080,type=Connector
java.lang:name=Code Cache,type=MemoryPool
Catalina:host=localhost,name=ErrorReportValve,type=Valve
Catalina:host=localhost,type=Host
Catalina:type=Engine