03-自动化监控-zabbix监控¶
Zabbix 服务监控实战¶
TCP状态监控¶
Zabbix应用监控系列之TCP状态监控
http://www.xuliangwei.com/xubusi/637.html
TCP监控
Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:所以今天我们来学学如何使用Zabbix监控tcp状态
1.配置Agent(标准化目录结构)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.编写Shell脚本
[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim tcp_status.sh
#!/bin/bash
############################################################
# $Name: tcp_status.sh
# $Version: v1.0
# $Function: TCP Status
# $Author: xuliangwei
# $organization: www.xuliangwei.com
# $Create Date: 2016-06-23
# $Description: Monitor TCP Service Status
############################################################
[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1
tcp_status_fun(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.txt
TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.txt | cut -d ' ' -f2)
if [ -z "$TCP_STAT_VALUE" ];then
TCP_STAT_VALUE=0
fi
echo $TCP_STAT_VALUE
}
tcp_status_fun $1;
添加执行权限
[root@linux-node1 scripts]# chmod +x tcp_status.sh
2.key的linux_tcp.conf的子配置文件如下:
[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_status[*],/bin/bash /etc/zabbix/scripts/tcp_status.sh "$1"
3.重启zabbix-agent,修改配置文件必须重启
[root@linux-node1 ~]# systemctl restart zabbix-agent
4.Server测试Agent是否能获取到值,通过Zabbix_get(不要直接执行脚本)
[root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k tcp_status[ESTAB]
8
5.展示所有Key(记得将模板关联主机)(这部分xml可加群索取:471443208)
6.查看图形(图形是自定义创建)
Nginx状态监控¶
运维监控平台之zabbix详解2
http://huaxin.blog.51cto.com/903026/1839313
Zabbix应用监控系列之Nginx状态监控
http://www.xuliangwei.com/xubusi/642.html
1.web01客户端开启nginx的状态模块
2.编辑zabbix客户端的配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
# Mandatory: no
# Default:
# UserParameter=
UserParameter=login-user,who|wc -l
UserParameter=Active,curl -s status.etiantian.org|awk -F ':' 'NR==1 {print $3}'
UserParameter=accepts,curl -s status.etiantian.org|awk 'NR==3 {print $1}'
UserParameter=handled,curl -s status.etiantian.org|awk 'NR==3 {print $2}'
UserParameter=requests,curl -s status.etiantian.org|awk 'NR==3 {print $3}'
[root@web01 ~]# /etc/init.d/zabbix-agent restart #重启服务配置生效
Zabbix应用监控系列之Nginx状态监控
http://www.xuliangwei.com/xubusi/642.html
1.配置所有Agent(标准化目录结构)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# systemctl restart zabbix-agent
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.在nginx.conf的Server标签中添加如下内容(如果nginx通过saltstack等配置管理工具进行统一管理,则需要在模板中统一加入这段配置)
[root@localhost ~]# yum -y install nginx
[root@linux-node2 ~]# vim /etc/nginx/nginx.conf
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
[root@linux-node2 ~]# systemctl restart nginx
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
Nginx状态解释:
Active connections Nginx正处理的活动链接数1个
server Nginx启动到现在共处理了1个连接。
accepts Nginx启动到现在共成功创建1次握手。
handled requests Nginx总共处理了1次请求。
Reading Nginx读取到客户端的 Header 信息数。
Writing Nginx返回给客户端的 Header 信息数。
Waiting Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。
Keep-alive的情况下,这个值等于active-(reading + writing)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
4.编写Nginx的Shell脚本(如果端口不一致,只需要修改脚本端口即可)
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts -p
[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim nginx_status.sh
#!/bin/bash
############################################################
# $Name: nginx_status.sh
# $Version: v1.0
# $Function: Nginx Status
# $Author: xuliangwei
# $organization: www.xuliangwei.com,www,bjstack.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
给脚本添加执行权限
[root@linux-node1 scripts]# chmod +x nginx_status.sh
5.key的nginx_status.conf的子配置文件如下:
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/scripts/nginx_status.sh "$1"
6.重启zabbix-agent
[root@linux-node1 ~]# systemctl restart zabbix-agent
7.测试一定使用Zabbix_get来获取值(传入2参数)监控端执行以下命令
[root@linux-node1 ~]# yum -y install zabbix-get
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -p 10050 -k "nginx_status[writing]"
1
8.展示所有Key(记得将模板关联主机)如图4-3
如果需要xml可以上bjstack运维社区提问索取
9.查看图形,如图4-4(图形自定义)
PHP-FPM状态监控¶
Zabbix应用监控系列之PHP-FPM状态监控
http://www.xuliangwei.com/xubusi/679.html
需要安装PHP环境
[root@linux-node3 ~]# yum -y install php php-fpm
1.配置所有Agent(标准化目录结构)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.PHP-FPM工作模式通常与Nginx结合使用,修改php-fpm.conf(找到自己的php-fpm.conf存放路径)
[root@linux-node1 ~]# vim /etc/php-fpm.d/www.conf #我php-fpm存放路径
pm.status_path = /phpfpm_status #不要忘记取消此行的注释
3.修改nginx.conf的配置文件,通过Nginx访问PHP-FPM状态。
[root@linux-node3 ~]# vim /etc/nginx/nginx.conf
location ~ ^/(phpfpm_status)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
[root@linux-node3 ~]# systemctl restart php-fpm
[root@linux-node3 ~]# systemctl restart nginx
4.访问测试phpfpm_status
[root@linux-node4 conf.d]# 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
#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,那说明你的最大进程数量过小,可以适当调整。
4.编写php-fpm的Shell脚本(如果端口不一致,只需要修改脚本端口即可)
[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim phpfpm_status.sh
#!/bin/bash
############################################################
# $Name: phpfpm_status.sh
# $Version: v1.0
# $Function: Nginx Status
# $Author: xuliangwei
# $organization: www.xuliangwei.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
给脚本添加执行权限
[root@linux-node1 scripts]# chmod +x phpfpm_status.sh
5.key的phpfpm_status.conf的子配置文件如下:
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf
UserParameter=phpfpm_status[*],/bin/bash /etc/zabbix/scripts/phpfpm_status.sh "$1"
6.重启zabbix-agent
[root@linux-node1 ~]# systemctl restart zabbix-agent
7.测试一定使用Zabbix_get来获取值
zabbix_get -s 192.168.56.13 -k phpfpm_status[accepted_conn]
45
8.展示所有Key(记得将模板关联主机)如图4-5
导入模板:zbx_php-fpm_chris_export_templates.xml
9.查看图形,如图4-4(图形自定义)
Redis状态监控¶
Zabbix应用监控系列之Redis状态监控
http://www.xuliangwei.com/xubusi/682.html
Redis使用自带的INFO命令,进行状态监控。以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
1.配置所有Agent(标准化目录结构)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.编写Shell脚本
脚本端口、连接redis服务地址根据具体情况进行修改
AUTH认证没有开启,将PASSWD修改为空即可。
[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim redis_status.sh
#!/bin/bash
############################################################
# $Name: redis_status.sh
# $Version: v1.0
# $Function: Redis Status
# $Author: xuliangwei
# $organization: www.xuliangwei.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="123" #如果没有设置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状态参数解释:
server : 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 作为默认参数。
3.给脚本添加执行权限
[root@linux-node1 scripts]# chmod +x redis_status.sh
4.Zabbix权限不足处理办法
[root@linux-node1 ~]# rm -f /tmp/redis_6379.tmp
5.key的redis_status.conf的子配置文件如下:
[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/redis_status.conf
UserParameter=redis_status[*],/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"
6.重启zabbix-agent
[root@linux-node1 ~]# systemctl restart zabbix-agent
7.测试一定使用Zabbix_get来获取值
[root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k redis_status[used_cpu_sys]
16.81
8.展示所有Key(记得将模板关联主机)如图4-14
图4-14
9.查看图形,如图4-15、图4-16(图形自定义)
图4-16
Tomcat状态监控¶
在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数据
*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进行数据展示
*配置JMX监控的步骤:*
1.安装Zabbix-Java-Gateway。
2.配置zabbix_java_gateway.conf参数。
3.配置zabbix-server.conf参数。
4.Tomcat应用开启JMX协议。
5.ZabbixWeb配置JMX监控的Java应用。
1.配置所有Agent(标准化目录结构)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.安装java以及zabbix-java-gateway (如果源码安装加上--enable-java参数)
[root@linux-node1 ~]# yum install zabbix-java-gateway java-1.8.0-openjdk -y
3.启动zabbix-java-gateway
[root@linux-node1 ~]# systemctl start zabbix-java-gateway
[root@linux-node1 ~]# netstat -lntup|grep 10052
tcp6 0 0 :::10052 :::* LISTEN 13042/java
4.修改zabbix-server 配置文件
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.90.11 # java gateway地址(如果和zabbix-server装一起可以写127.0.0.1)
JavaGatewayPort=10052 #java gateway端口,默认端口10052
StartJavaPollers=5 #启动进程轮询java gateway
5.重启zabbix-server
[root@linux-node1 ~]# systemctl restart zabbix-server
6.开启tomcat的远程jvm配置文件
[root@linux-node1 ~]# vim /usr/local/tomcat/bin/catalina.sh #找到自己本机tomcat路径(如果是salt来管,修改salt模板即可)
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=192.168.90.11"
#远程jvm配置文件解释
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote # #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #jmx远程端口,Zabbix添加时必须一致
-Dcom.sun.management.jmxremote.authenticate=false #不开启用户密码认证
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.90.11" #运行tomcat服务IP(不要填写错了)
7.重启tomcat服务
[root@linux-node1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@linux-node1 ~]# /usr/local/tomcat/bin/startup.sh
8.zabbix添加tomcat主机,并添加Zabbix自带java监控模板,如图4-10、图4-11、图4-12
图4-10
图4-11
图4-12
9.查看图形,如图4-13
10.自带的监控可能无法满足企业需求,大家可以根据公司的业务定制不同的JVM监控模板。
MySQL数据库监控¶
MySQL数据库可以通过percona插件进行监控
Percona : https://www.percona.com/
zabbix客户端配置,官方文档
https://www.percona.com/doc/percona-monitoring-plugins/1.1/zabbix/index.html
上传并安装软件包percona-zabbix-templates-1.1.5-1.noarch.rpm
[root@linux-node1 ~]# rpm -ivh percona-zabbix-templates-1.1.5-1.noarch.rpm
[root@linux-node1 ~]# ll /var/lib/zabbix/percona/
total 0
drwxr-xr-x 2 root root 68 Oct 5 22:19 scripts #脚本目录
drwxr-xr-x 2 root root 117 Oct 5 22:19 templates #zabbix模板目录
上传并安装mysql的二进制包mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz(生产环境尽量使用二进制,性能比较好)
[root@linux-node1 ~]# cd /usr/local/src/
[root@linux-node1 src]# tar xf mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
[root@linux-node1 src]# cp -r mysql-5.6.31-linux-glibc2.5-x86_64 /usr/local/
[root@linux-node1 src]# useradd mysql -M -s /sbin/nologin -g mysql
[root@linux-node1 src]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
[root@linux-node1 src]# chown -R mysql.mysql /usr/local/mysql-5.6.31-linux-glibc2.5-x86_64
[root@linux-node1 src]# ln -s /usr/local/mysql-5.6.31-linux-glibc2.5-x86_64/ /usr/local/mysql
配置mysql配置文件
[root@linux-node1 src]# cd /usr/local/mysql
[root@linux-node1 mysql]# ll my.cnf
[root@linux-node1 mysql]# cd ..
[root@linux-node1 local]# chown -R mysql.mysql mysql
初始化mysql数据库
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/my.cnf --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
出现错误:
FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
解决方法 :安装autoconf库
[root@linux-node1 ~]# yum -y install autoconf //此包安装时会安装Data:Dumper模块
启动mysql数据库
[root@linux-node1 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@linux-node1 ~]# chmod +x /etc/init.d/mysqld
[root@linux-node1 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@linux-node1 ~]# netstat -ltnp|grep 3306
tcp6 0 0 :::3306 :::* LISTEN 29002/mysqld
进入mysql数据库
[root@linux-node1 ~]# /usr/local/mysql/bin/mysql -S /usr/local/mysql/mysql.sock
以下是配置好zabbix服务端
测试percona是否配置成功
[root@linux-node1 percona]# cd /var/lib/zabbix/percona/scripts/
[root@linux-node1 scripts]# ls
get_mysql_stats_wrapper.sh ss_get_mysql_stats.php
[root@linux-node1 scripts]# vim ss_get_mysql_stats.php.cnf
<?php
$mysql_user='root';
$mysql_pass='';
?>
复制templates配置文件到zabbix客户端
[root@linux-node1 scripts]# cd /var/lib/zabbix/percona/templates/
[root@linux-node1 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@linux-node1 templates]# ll /etc/zabbix/zabbix_agentd.d/
total 24
-rw-r--r-- 1 root root 1531 Oct 2 12:01 userparameter_mysql.conf
-rw-r--r-- 1 root root 18866 Oct 6 13:44 userparameter_percona_mysql.conf
下载导入zabbix-mysql模板
[root@linux-node1 percona]# cd /var/lib/zabbix/percona/templates/
[root@linux-node1 templates]# ll
total 284
-rw-r--r-- 1 root root 18866 Jun 19 2015 userparameter_percona_mysql.conf
-rw-r--r-- 1 root root 269258 Jun 19 2015 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.5.xml
[root@linux-node1 templates]# sz -y zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.5.xml
web安装出现的错误
[root@linux-node1 ~]# ln -s /usr/local/mysql/mysql.sock /var/lib/mysql/mysql.sock
zabbix日志出现的错误
29502:20161005:235205.238 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
29502:20161005:235205.238 database is down: reconnecting in 10 seconds
29502:20161005:235215.240 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决方法
[root@linux-node1 ~]# ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock
Zabbix忘记后台登陆密码如何解决¶
Zabbix忘记后台登陆密码如何解决?
http://www.bjstack.com/question/7
MariaDB [(none)]> use zabbix;
Database changed
MariaDB [zabbix]> select userid,alias,passwd from users;
+--------+-------+----------------------------------+
| userid | alias | passwd |
+--------+-------+----------------------------------+
| 1 | Admin | a3bef3a41d5b30a80391716e143e60c1 |
| 2 | guest | d41d8cd98f00b204e9800998ecf8427e |
+--------+-------+----------------------------------+
2 rows in set (0.00 sec)
MariaDB [zabbix]> update users set passwd=md5("zabbix") where userid='1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [zabbix]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [zabbix]> select userid,alias,passwd from users;
+--------+-------+----------------------------------+
| userid | alias | passwd |
+--------+-------+----------------------------------+
| 1 | Admin | 5fce1b3e34b520afeffb37ce08c7cd66 |
| 2 | guest | d41d8cd98f00b204e9800998ecf8427e |
+--------+-------+----------------------------------+
2 rows in set (0.00 sec)
生产环境监控如何来做¶
*1.硬件监控。*
通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做)、服务器的温度以及其他,可以通过IPMI来实现。当然如果没有硬件全都是云,直接跳过这一步骤。
*2.系统监控。*
如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode节点。当然这些都是需要配置触发器,因为默认太低会频繁报警。
*3.服务监控。*
比如公司用LNMP nginx自带Status模块、PHP也有相关的Status、MySQL的话可以通过percona来进行监控。Redis这些通过自身的info获信息进行过滤等。方法都类似。要么服务自带。要么通过脚本来实现想监控的内容,以及报警和图形功能。
*4.网络监控。*
如果是云主机又不是跨机房,那么可以选择不监控网络。当然你说我们是跨机房以及如何如何。推荐使用smokeping来做网络相关的监控。或者直接交给你们的网络工程师来做。因为术业有专攻。
*5.安全监控。*
如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。如果是硬件,那么推荐使用硬件防火墙。使用云可以购买防DDOS,避免出现故障导致down机一天。如果是系统,那么权限、密码、备份、恢复基础的方案要做好。web同时也可以使用nginx+waf来实现一个web层面的防火墙。当然也可以使用集成好的openresty。
*6.Web监控。*
web监控的话题其实还是很多。比如可以使用自带的web监控来监控页面相关的延迟、js响应时间、下载时间、等等。这里我推荐使用专业的商业软件,听云来做这一块。毕竟人家全国各地都有机房。(如果本身是多机房那就另说了)
*7.日志监控。*
如果是web的话可以使用监控Nginx的500x日志。PHP的ERROR日志。其实这些需求无非是,收集、存储、查询、展示,我们其实可以使用开源的ELKstack来实现。ogstash(收集)、elasticsearch(存储+搜索)、kibana(展示)
*8.业务监控。*
我们上面做了那么多,其实最终还是保证业务的运行。这样我们做的监控才有意义。所以业务层面这块的监控需要和开发以及总监开会讨论,监控比较重要,如API、等。(需要开会确认)然后通过简单的脚本就可以实现,最后设置触发器即可
*9.流量分析。*
平时我们分析日志都是拿awk sed xxx一堆工具来实现。这样对我们统计ip、pv、uv不是很方便。那么可以使用百度统计、google统计、商业,让开发嵌入代码即可。当然避免隐私也可以使用piwiki来做相关的流量分析。
*10.可视化。*
通过screen以及引入一些第三方的库来美化界面,同时我们也需要知道、订单量突然增加、突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,还是被攻击了。可以结合监控平来来梳理各个系统之间的业务关系。
*11.自动化监控。*
如上我们做了那么多的工作,当然不能是一台一台的来加key实现。可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。
Zabbix 日志报警¶
下午的日志报警,表达式应该是
linux-node3.example.com:log[/var/log/zabbix/zabbix_agentd.log].regexp(stopped)}=0