6.Zabbix深入应用监控
[toc]
Zabbix监控Nginx
配置监控Nginx的步骤
实验环境
服务器系统 | 角色 | IP |
---|---|---|
CentOS 7.4 x86_64 | Zabbix-Server | 10.0.0.71 |
CentOS 7.4 x86_64 | Zabbix-Agent | 10.0.0.7 |
监控nginx
1 | # nginx配置文件 |
网页配置
zabbix监控php
配置监控php的步骤
实验环境
服务器系统 | 角色 | IP |
---|---|---|
CentOS 7.4 x86_64 | Zabbix-Server | 10.0.0.71 |
CentOS 7.4 x86_64 | Zabbix-Agent | 10.0.0.7 |
修改php配置
1 | vim /etc/php-fpm.d/www.conf |
修改nginx配置
1 | # 编辑nginx配置文件 |
网页配置
Zabbix监控JVM
在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数据
JMX在Zabbix中的运行流程
- Zabbix-Server找Zabbix-Java-Gateway获取Java数据
- Zabbix-Java-Gateway找Java程序服务器部署的zabbix-agent获取数据
- Java程序返回数据给Zabbix-Java-Gateway
- Zabbix-Java-Gateway返回数据给Zabbix-Server
- Zabbix-Server进行数据展示
配置JMX监控的步骤
- 安装Zabbix-Java-Gateway
- 配置zabbix_java_gateway.conf参数
- 配置zabbix-server.conf参数
- Tomcat应用开启JMX协议
- ZabbixWeb配置JMX监控的Java应用
实践环境
服务器系统 | 角色 | IP |
---|---|---|
CentOS 7.4 x86_64 | Zabbix-Server | 10.0.0.8 |
CentOS 7.4 x86_64 | Zabbix-java-gateway | 10.0.0.8 |
CentOS 7.4 x86_64 | Zabbix-Agent | 10.0.0.7 |
zabbix服务端
1 | # 安装java |
zabbix客户端
yum安装tomcat
1 | # 安装tomcat |
绿色安装tomcat(压缩包免安装)
1 | # 安装tomcat服务 |
网页配置(zabbix添加tomcat主机,并添加Zabbix自带java监控模板)
Zabbix监控MySQL
网页配置监控
1 | # 安装mariadb |
手动配置监控
percona Monitoring Plugins 是一个高质量的组件,为MySQL 数据库添加企业级的监控和图表功能。但其脚本使
用PHP 实现,故而Zabbix-Agent 需要安装PHP 环境。
准备环境
服务器系统 | 角色 | IP |
---|---|---|
CentOS 7.4 x86_64 | Zabbix-Server | 10.0.0.8 |
CentOS 7.4 x86_64 | Zabbix-Agent | 10.0.0.7 |
配置流程
在Zabbix-Agent 端安装percona Monitoring Plugins
1
2
3yum install -y http://www.percona.com/downloads/perconarelease/
redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install percona-zabbix-templates -y查看percona 安装后的目录结构
1
2
3
4
5
6
7
8tree /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 #模板文件位置将自定义监控项配置文件复制至/etc/zabbix_agentd.conf.d 目录下
1
2cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/etc/zabbix/zabbix_agentd.d/percona_mysql.conf重启zabbix-agent
1
systemctl restart 1 zabbix-agent
修改脚本中的MySQL 用户名和密码
1
2
3
4vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'root';
$mysql_pass = '123';
$mysql_port = 3306;在Zabbix-Server 端上使用Zabbix_get 获取值(否则会失败)
1
2
3
4
5
6
7zabbix_get -s 10.0.0.7 -k MySQL.pool-read-requests
223003813
//如果获取不到值常见问题
1.看是否是MySQL密码错误
2.不要直接执行脚本来获取
3.删除/tmp/localhost-mysql_cacti_stats.txt文件
4.权限问题导致在Zabbix页面模板选项中导入Percona模板, 模板存放在/var/lib/zabbix/percona/templates , 最后关联主机即可。
Zabbix监控redis
网页配置监控
安装redis
1 | # 安装redis |
手动配置监控
Redis 使用自带的INFO 命令,进行状态监控。以一种易于解释且易于阅读的格式,返回关于Redis 服务器的各种信息和统计数值。
准备环境
服务器系统 | 角色 | IP |
---|---|---|
CentOS 7.4 x86_64 | Zabbix-Server | 10.0.0.8 |
CentOS 7.4 x86_64 | Zabbix-Agent | 10.0.0.7 |
操作流程
编写Shell脚本
- 脚本端口、连接redis服务地址根据具体情况进行修改
- AUTH认证没有开启,将PASSWD修改为空即可。
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
97mkdir -p /etc/zabbix/scripts
vim /etc/zabbix/scripts/redis_status.sh
#!/bin/bash
############################################################
# $Name: redis_status.sh
# $Version: v1.0
# $Function: Redis Status
# $Author: DriverZeng
# $organization: www.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- 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
38server : Redis 服务器信息,包含以下域:
redis_version : Redis 服务器版本
redis_git_sha1 : Git SHA1
redis_git_dirty : Git dirty flag
os : Redis 服务器的宿主操作系统
arch_bits : 架构(32 或 64 位)
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 : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
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 : RDB 和 AOF 的相关信息
stats : 一般统计信息
replication : 主/从复制信息
cpu : CPU 计算量统计信息
commandstats : Redis 命令统计信息
cluster : Redis 集群信息
keyspace : 数据库相关的统计信息
参数还可以是下面这两个:
all : 返回所有信息
default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。添加脚本执行权限
1
chmod +x /etc/zabbix/scripts/1 redis_status.sh
Zabbix权限不足处理办法
1
rm -f /tmp/redis_6379.tmp
key的redis_status.conf 的配置文件如下:
1
2cat /etc/zabbix/zabbix_agentd.d/redis_status.conf
UserParameter=redis_status[*],/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"重启zabbix-agent
1
systemctl restart 1 zabbix-agent
在Zabbix-Server 使用Zabbix_get 获取值
1
2zabbix_get -s 10.0.0.7 -k redis_status[used_cpu_sys]
16.81
zabbix监控web
1 | # 域名解析 |
Web场景监测网页配置
我们使用Zabbix Web 监控来监控Zabbix的Web界面。我们想知道它是否可用、是否正常工作以及响应速度。所以我们必须使用用户名和密码登录。
访问zabbix
登录zabbix
检查zabbix
退出zabbix
检查是否注销
汇总