zabbix--3.0--3

 
使用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,在某些方面它比官方的性能更好
下面链接
 

 

 
 

 

最早是由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的模板为主动模式模板
 
 

 

 

 

 

 
 它的状态
 
 

 

 
 数据获取成功
 

 

posted on 2017-04-07 21:31  nmap  阅读(832)  评论(0编辑  收藏  举报

导航