使用JMX监控jvm
vim /usr/local/tomcat/bin/catalina.sh
添加如下内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.58.12"
重启tomcat,查看监听情况
[root@linux-node2 src]# killall java
[root@linux-node2 src]# killall java
java: no process found
[root@linux-node2 src]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started. 看到8888端口已经起来了
[root@linux-node2 src]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 6938/zabbix_agentd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1160/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1251/master
tcp6 0 0 :::10050 :::* LISTEN 6938/zabbix_agentd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8522/java
tcp6 0 0 :::56614 :::* LISTEN 8522/java
tcp6 0 0 :::8009 :::* LISTEN 8522/java
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::8080 :::* LISTEN 8522/java
tcp6 0 0 :::22 :::* LISTEN 1160/sshd
tcp6 0 0 :::8888 :::* LISTEN 8522/java
tcp6 0 0 :::57945 :::* LISTEN 8522/java
tcp6 0 0 ::1:25 :::* LISTEN 1251/master
[root@linux-node2 src]#
在电脑的jdk的bin目录下,找到jconsole
点击update
JMX的key可以在server上使用zabbix-get获取下
[root@linux-node1 ~]# zabbix_get -s 192.168.58.12 -k jmx["java.lang:type=GarbageCollector,name=Copy",CollectionCount]
ZBX_NOTSUPPORTED: Unsupported item key.
[root@linux-node1 ~]#
不知道为什么,开启debug看看
debug是4
[root@linux-node2 src]# vim /etc/zabbix/zabbix_agentd.conf
这里需要改成4
重启agent
systemctl restart zabbix-agent.service
看agent日志
tail -f /var/log/zabbix/zabbix_agentd.log
显示的并没太多有用信息
先放这里
zabbix监控Nginx
监控过程如下
1、开启Nginx监控
2、编写脚本来进行数据采集
3、设置用户自定义参数
4、重启zabbix-agent
5、添加item
6、创建图形
7、创建触发器
8、创建模板
下载这个脚本
它不仅可以监控nginx,还可以监控memcached,redis,http状态
tcp链接比较多的情况下,ss命令比netstat快
脚本里面的命令
[root@linux-node2 src]# ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
LISTEN 14
ESTAB 4
TIME-WAIT 30
[root@linux-node2 src]#
因为上面只显示当前的有数据的,所以下面多了个判断,没数据的项都显示0
把这个函数的第一个参数复制给tcp_stat
这个函数的第一个参数根据下面main里看到,是这个脚本的第二个参数
考虑到一个机器可能起多个nginx,所以加个端口参数区分
memcached的脚本这里的$1 和$2 分别是脚本的$2 和 $3
nc其实是net cat
修改zabbix-agent配置文件,让其包含.conf文件
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
原本下面文件包含这个目录下的所有文件,改一下,改成*.conf
这样的话,sh脚本也可以放这个目录下了,然后不会被误认为配置文件而加载
[root@linux-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@linux-node1 zabbix_agentd.d]# ls
nginx.conf userparameter_mysql.conf
[root@linux-node1 zabbix_agentd.d]# rz -E
rz waiting to receive.
[root@linux-node1 zabbix_agentd.d]# ls
nginx.conf userparameter_mysql.conf zabbix_linux_plugin.sh
[root@linux-node1 zabbix_agentd.d]# chmod +x zabbix_linux_plugin.sh
[root@linux-node1 zabbix_agentd.d]# ls
nginx.conf userparameter_mysql.conf zabbix_linux_plugin.sh
[root@linux-node1 zabbix_agentd.d]#
改成下划线,对应监控脚本内容
[root@linux-node1 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
[root@linux-node1 ~]#
因为脚本里写的就是下划线,要对应上
这里也可以更改,因为agent和nginx在一台机器上
[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
[root@linux-node1 ~]#
通过命令简单获取成功
[root@linux-node1 zabbix_agentd.d]# ./zabbix_linux_plugin.sh nginx_status 8080 active
1
[root@linux-node1 zabbix_agentd.d]#
新建自定义key文件,调用这个脚本
[root@linux-node1 zabbix_agentd.d]# cp nginx.conf linux.conf
[root@linux-node1 zabbix_agentd.d]# vim linux.conf
[root@linux-node1 zabbix_agentd.d]# cat linux.conf
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
[root@linux-node1 zabbix_agentd.d]#
重启agent
[root@linux-node1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
[root@linux-node1 zabbix_agentd.d]#
这个脚本支持传参
[root@linux-node1 ~]# zabbix_get -s 192.168.58.11 -k linux_status[nginx_status,8080,active]
1
[root@linux-node1 ~]#
zabbix_get成功,这样可以添加到web上了
配置---模板---创建模板
add之后,在模板里找到它,然后点进去,看到items等
创建item
更新间隔,30秒太频繁了,可以改成60秒一次,顺便创建一个叫Nginx Status的application
点击add,添加成功
点进去,克隆它
把这几个都加上去
依次,克隆加进去
心得。我觉得可以把一些重要的模板克隆了,防止误操作,在模板上改东西
加图形
items选这4个就行了
给linux-node1加这个模板
可以导出这个模板给别人
导出的模板需要自己改名,导出来默认都是同一个名字
graph有数据了
监控tcp的11种状态
tcp 11种状态的模板
node1加这个模板
node2也加此模板
它用的还是上面nginx那个脚本
zabbix用户要能执行它,真正执行它的时候是zabbix执行
[root@linux-node1 zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
[root@linux-node1 zabbix_agentd.d]# ll
total 16
-rw-r--r-- 1 root root 96 Mar 26 15:22 linux.conf
-rw-r--r-- 1 root root 117 Mar 19 20:37 nginx.conf
-rw-r--r-- 1 root root 1531 Mar 2 23:49 userparameter_mysql.conf
-rwxr-xr-x 1 root root 2776 Jun 18 2016 zabbix_linux_plugin.sh
[root@linux-node1 zabbix_agentd.d]#
练习怎么加触发器
先给nginx监控加触发器
这里大于1,出于测试目的
找到刚才创建的Nginx status
打开页面,模拟问题。让连接数大于1
自动发送了邮件告警
邮件配置对的话,肯定能收到告警
这里还看到了一个告警,Too many processes on linux-node2
系统自带的触发器,阈值太低,修改下模板里的items里的阀值
默认5分钟的平均值大于300就告警,改成600
改成600
Zabbix告警通知
自定义告警脚本:
1、放在 /usr/lib/zabbix/alertscripts
2、需要支持3个参数,1 收件人,2 主题, 3内容
3、执行权限
4、web界面添加
5、修改actions
短信通道,阿里大鱼,一条0.045左右
它有http的api。很方便
curl -X POST 'http://gw.api.taobao.com/router/rest' \
-H 'Content-Type:application/x-www-form-urlencoded;charset=utf-8' \
-d 'app_key=12129701' \
-d 'format=json' \
-d 'method=alibaba.aliqin.fc.sms.num.send' \
-d 'partner_id=apidoc' \
-d 'sign=DB9F439ACCF950E94514CDF0BF24DFB8' \
-d 'sign_method=hmac' \
-d 'timestamp=2017-03-26+16%3A25%3A33' \
-d 'v=2.0' \
-d 'extend=123456' \
-d 'rec_num=13000000000' \
-d 'sms_free_sign_name=%E9%98%BF%E9%87%8C%E5%A4%A7%E4%BA%8E' \
-d 'sms_param=%7B%5C%22code%5C%22%3A%5C%221234%5C%22%2C%5C%22product%5C%22%3A%5C%22alidayu%5C%22%7D' \
-d 'sms_template_code=SMS_585014' \
-d 'sms_type=normal'
亿美软通短信平台比较古老了。现在很少用
模拟下自己写的脚本发告警流程
脚本放在下面目录下/usr/lib/zabbix/alertscripts
[root@linux-node1 ~]# cd /usr/lib/zabbix/alertscripts
[root@linux-node1 alertscripts]# ls
[root@linux-node1 alertscripts]# vim sms.sh
[root@linux-node1 alertscripts]# chmod +x sms.sh
[root@linux-node1 alertscripts]# cat sms.sh
#!/bin/bash
ALERT_TO=$1
ALERT_TITLE=$2
ALERT_BODY=$3 echo $ALERT_TO >> /tmp/sms.log
echo $ALERT_TITLE >> /tmp/sms.log
echo $ALERT_BODY >> /tmp/sms.log
[root@linux-node1 alertscripts]#
创建新的告警介质
脚本需要加参数,从脚本里取,用大括号括起来,这3个参数分别是$1,$2,$3
改action
用户这里
触发报警
模拟发送成功,实际自己写的脚本就该这么个架构
[root@linux-node1 tmp]# tail -5 /tmp/sms.log
xxxx38@qq.com
PROBLEM: Nginx Active > 1
Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tus[nginx_status,8080,active]): 3
[root@linux-node1 tmp]#
Zabbix监控MySQL
zabbix自带监控mysql的脚本,真正生产喜欢用的是percona的脚本
percona也有自己的mysql,在某些方面它比官方的性能更好
下面链接
可以看到它支持下面3个产品
最早是由cacti改的,由于zabbix太火了。没支持zabbix的不行了,就要被淘汰。
它使用php脚本连接mysql
要监控mysql的话,agent端必须安装php和phpmysql
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm -y [root@linux-node1 ~]# yum install percona-zabbix-templates php php-mysql -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirror01.idc.hinet.net
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Package percona-zabbix-templates-1.1.7-2.noarch already installed and latest version
Package php-5.4.16-42.el7.x86_64 already installed and latest version
Package php-mysql-5.4.16-42.el7.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 ~]#
相关知识点
1、php脚本用来采集数据
2、shell调用这个php
3、zabbix配置文件
4、zabbix模板文件
拷贝模板配置文件到zabbix配置文件目录下
[root@linux-node1 ~]# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.7.xml
[root@linux-node1 ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@linux-node1 ~]#
查看
[root@linux-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@linux-node1 zabbix_agentd.d]# ls
linux.conf userparameter_mysql.conf zabbix_linux_plugin.sh
nginx.conf userparameter_percona_mysql.conf
[root@linux-node1 zabbix_agentd.d]#
重启zabbix-agent
[root@linux-node1 scripts]# systemctl restart zabbix-agent.service
[root@linux-node1 scripts]#
这个shell脚本是调用php脚本
这个配置文件需要拷贝到agent下面
这个模板文件用于导出zabbix server
percona自带的模板不能用。
查看此配置文件,都是一些自定义的key,key的值通过脚本获取
[root@linux-node1 zabbix_agentd.d]# tail -10 userparameter_percona_mysql.conf
UserParameter=MySQL.log-writes,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh hg
UserParameter=MySQL.Query-time-count-04,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh op
UserParameter=MySQL.Query-time-count-05,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh oq
UserParameter=MySQL.Query-time-count-06,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh or
UserParameter=MySQL.Query-time-count-07,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh os
UserParameter=MySQL.Query-time-count-08,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ot
UserParameter=MySQL.Query-time-count-09,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ou
UserParameter=MySQL.Open-files,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ij
UserParameter=MySQL.State-closing-tables,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lq
UserParameter=MySQL.running-slave,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
[root@linux-node1 zabbix_agentd.d]#
通过下面脚本获取key的value
[root@linux-node1 zabbix_agentd.d]# 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]#
创建连接mysql的配置文件,由于root密码是空。所以这里也写的空
[root@linux-node1 scripts]# cat ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = '';
[root@linux-node1 scripts]#
[root@linux-node1 scripts]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9629
Server version: 5.5.52-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit
Bye
[root@linux-node1 scripts]#
测试下此目录下脚本执行是否正常
[root@linux-node1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
[root@linux-node1 scripts]#
注意此脚本默认配置。如果不符合需要更改。这里由于mysql是yum安装的,环境变量没问题,另外授权登录也是localhost
[root@linux-node1 scripts]# ll get_mysql_stats_wrapper.sh
-rwxr-xr-x 1 root root 1251 Dec 10 02:22 get_mysql_stats_wrapper.sh
[root@linux-node1 scripts]#
这是监控脚本默认的地方,一些东西需要改,比如mysql全路径
默认是localhost权限
给node1添加模板
脚本没问题,加入监控监控没问题
脚本调用了php
[root@linux-node1 scripts]# ./get_mysql_stats_wrapper.sh gm
1
[root@linux-node1 scripts]#
Zabbix-Web监控
现在zabbix-get报错,因为原先是root权限执行的脚本,它会在tmp目录下生成下面文件。
[root@linux-node1 scripts]# zabbix_get -s 192.168.58.11 -k MySQL.max-connections
rm: cannot remove ‘/tmp/localhost-mysql_cacti_stats.txt’: Operation not permitted
151
[root@linux-node1 scripts]#
重新授权下
[root@linux-node1 scripts]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1406 Mar 26 22:15 /tmp/localhost-mysql_cacti_stats.txt
[root@linux-node1 scripts]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
[root@linux-node1 scripts]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 zabbix zabbix 1406 Mar 26 22:15 /tmp/localhost-mysql_cacti_stats.txt
[root@linux-node1 scripts]# zabbix_get -s 192.168.58.11 -k MySQL.max-connections
151
[root@linux-node1 scripts]#
[root@linux-node1 ~]# curl --head http://192.168.58.12:8080/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 26 Mar 2017 15:14:17 GMT [root@linux-node1 ~]#
它不依赖于agent,是server自己的
创建一个web场景
agent这里你可以选择一个浏览器
以前也有浏览器,但是没3.0这么全
默认使用agent了
步骤这里
add
add之后
认证相关
认证不配置,点击add即可
add之后
系统默认没加触发器
monitor---web看到如下
这个step的里面下面的作用是,从它会默认从监控的页面里找匹配的字符串,匹配到了它返回OK
假如你不想仅仅看状态的话,
假如你还想看页面关键字
开始手动加触发器,所以最好写个模板
添加表达式
停止tomcat主动触发告警,测试
[root@linux-node2 ~]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@linux-node2 ~]# lsof -i:8080
[root@linux-node2 ~]#
服务器时间不对,导致报警没显示
[root@linux-node1 ~]# date
Mon Mar 27 08:45:34 CST 2017
[root@linux-node1 ~]# systemctl restart ntpd
[root@linux-node1 ~]# date
Mon Mar 27 08:45:46 CST 2017
[root@linux-node1 ~]# date
Mon Mar 27 08:45:47 CST 2017
[root@linux-node1 ~]# date
Mon Mar 27 08:45:48 CST 2017
[root@linux-node1 ~]# date
Wed Mar 29 23:10:17 CST 2017
[root@linux-node1 ~]#
时间对了之后,再次刷新就显示了
发送告警也OK
这是现网用的action告警信息。删了很多
保证70个字符以内
状态:{TRIGGER.STATUS}
主机: ({HOST.NAME1}
监控项:{ITEM.KEY1}):{ITEM.VALUE1}
模拟故障测试方法2,模拟404故障
[root@linux-node2 webapps]# mv ROOT ROOT2
[root@linux-node2 webapps]# ls
docs examples host-manager manager ROOT2
[root@linux-node2 webapps]# mv ROOT2 ROOT
[root@linux-node2 webapps]#
告警很快下面这里告警比上面关闭tomcat导致端口不可达的告警快很多。模拟404这种发现问题立马告警
[root@linux-node1 ~]# tail -f /tmp/sms.log
Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*e=Runtime",Uptime]): 00:00:09
525031638@qq.com
PROBLEM: linux-node2 is not reachable
Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*e=Runtime",Uptime]): 00:00:25
525031638@qq.com
状态:OK
监控项:jmx["java.lang:type=Runtime",Uptime]):00:00:5
525031638@qq.com
状态:PROBLEM
监控项:web.test.rspcode[tomcat web monitor,tomcat index]):40
关于web监控的密码验证,可以post过去用户名和密码
打印机没纸都可以监控,通过snmp
Zabbix监控模式
怎么看zabbix server能不能抗住,看队列就行了,看看item更新超时时间
为什么使用主动模式
1、监控主机多,性能跟不上,延迟大
2、多机房,防火墙
Zabbix轻松解决。Nagios不太好解决
针对Agent来说
1、被动模式
2、主动模式,active
当监控主机超过300+,建议使用主动模式
改成主动模式,这里改成需要0
如果你不设置主机名,它会根据item获取
日志模式设置的地方。
[root@linux-node2 webapps]# systemctl restart zabbix-agent.service
[root@linux-node2 webapps]#
网页制作主动监控模式模板
link的模板去掉。link主动监控的模板
add之后
这里都变成active的了
更改items为主动模式
key的类型都变成active的了
修改node2的模板为主动模式模板
它的状态
数据获取成功