Fork me on GitHub
Suzf  Blog

Tag Zabbix

[译] SNMP Items with ZABBIX

SNMP Items with ZABBIX

原文:https://www.zabbix.com/wiki/howto/monitor/snmp/snmp

翻译不好的地方,欢迎大家指出.
设备

Cisco 3750X

FAQ_Zabbix:解决模板收集到的数据和真实数据有偏差

前不久定制了一个Sanfor的模板,后发现 发现内存图形呈现的数据太不靠谱了。和真是数据相差近千倍。

使用snmpwalk 抓取数据后发现单位是kb , 靠懵了和 交换、路由的单位不太一样

查看了一下官方手册 ,在 item 有一个选项是 Use custom multiplier 可以转换单位

https://www.zabbix.com/documentation/2.0/manual/config/items/item

Zabbix之监控Nginx状态信息

nginx需要支持 http_stub_status_module 编译的时候需要使用--with-http_stub_status_module
yum默认支持此选项

1. 配置nginx stuats
源码: vim nginx.conf
yum: vim /etc/nginx/conf.d/default.conf
#and add the following to your server block 

location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 172.16.7.70; #Put your servers IPaddress instead of 172.16.7.70
deny all;

#这里是线上Nginx的配置【yum】
location /nginx_status {
                stub_status on;
                allow 127.0.0.1;
                allow 172.16.99.38;
        }

  # 检测配置文件
  nginx -t
  # 重新加载配置文件
  nginx -s reload        

2.查看Nginx状态信息
curl localhost/nginx_status

注解:
Active connections: 1 当前活动的连接数
server accepts handled requests
 3721 3721 3714
 3721  从启动到现在一共处理的连接数
 3721  从启动到现在成功创建的握手的次数
 3714   总共处理的请求数(requests)
 请求的丢失数=(握手-连接)

connection 连接数,tcp连接
request http请求,GET/POST/DELETE

Reading: 0 Writing: 1 Waiting: 0
Reading: 0 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头
Waiting: 0 等待的请求数

3. zabbix客户端配置 

#创建检测脚本
mkdir /usr/local/zabbix/scripts 

vi /usr/local/zabbix/scripts/nginx_status.sh 

#!/bin/bash 
# Script to fetch nginx statuses for tribily monitoring systems 
# Author: [email protected] 
# License: GPLv2 

# Set Variables 
#BKUP_DATE=`/bin/date +%Y%m%d` 
#LOG="/etc/zabbix/nginx_status.log" 
HOST=`/sbin/ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` 
PORT="80" 

# Functions to return nginx stats 

function active { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Active' | awk '{print $NF}' 
} 

function reading { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Reading' | awk '{print $2}' 
} 

function writing { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Writing' | awk '{print $4}' 
} 

function waiting { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' 
} 

function accepts { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $1}' 
} 

function handled { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $2}' 
} 

function requests { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $3}' 
} 

# Run the requested function 
$1 

# 对脚本赋予执行权限
chmod +x /usr/local/zabbix/scripts/nginx_status.sh 

# 修改agent 配置文件
vim /usr/local/zabbix/etc/zabbix_agentd.conf
#开启自定义KEY功能
UnsafeUserParameters=1
UserParameter=nginx.accepts,/usr/local/zabbix/scripts/nginx_status.sh accepts
UserParameter=nginx.handled,/usr/local/zabbix/scripts/nginx_status.sh handled
UserParameter=nginx.requests,/usr/local/zabbix/scripts/nginx_status.sh requests
UserParameter=nginx.connections.active,/usr/local/zabbix/scripts/nginx_status.sh active
UserParameter=nginx.connections.reading,/usr/local/zabbix/scripts/nginx_status.sh reading
UserParameter=nginx.connections.writing,/usr/local/zabbix/scripts/nginx_status.sh writing
UserParameter=nginx.connections.waiting,/usr/local/zabbix/scripts/nginx_status.sh waiting 

#重启zabbix_agentd
/etc/init.d/zabbix_agentd  restart

4.服务端测试

# 有信息返回说明配置正常
# /usr/local/zabbix/bin/zabbix_get -s 172.16.99.25 -knginx.accepts
12877

# 有图有真相

#模板
http://pan.baidu.com/s/1c00Aqcg

FAQ : 若果是无返回信息则说明agent端配置错误这是查看zabbix_agentd.log 的输出日志,排查错误

#查看who权限
# ll /sbin/ifconfig
-rwx------ 1 root root 73936 May 10 2012 /sbin/ifconfig
# ll /usr/bin/who
-rwx------ 1 root root 48952 Nov 22 2013 /usr/bin/who
果真没有执行权限
visudo 授权或是 chmod +x /usr/bin/who &&  chmod +x  /sbin/ifconfig 

 

Zabbix之JMX监控Tomcat

zabbix从2.0开始添加了支持用于监控JMX应用程序的服务进程,称为"ZabbixJavagateway";它是用java写的一个程序。

一.工作原理:

zabbixserver想知道一台主机上的特定的JMX值时,它向ZabbixJavagateway询问,而ZabbixJavagateway使用"XmanagementAPI"询特定的应用程序,而前提是应用程序这端在开启时需要&l"com.sun.management.jmxremote&r"来开启JMX查询就行了。

Zabbixserver有一个特殊的进程用来连接Javagateway叫StartJavaPollers;Javagateway通过配置文件中START_POLLERS参数设置启动多个线程,在zabbix服务器这边如果一个连接所用时间超过Timeout,将会被中断,但是Javagateway将继续从JMXcounter取数据。所以

StartJavaPollers设置的值要小于等于START_POLLERS设置的值。

ZabbixJavagateway就相当于一个代理。

[译] Zabbix 之监控虚拟主机EXSI

概述

Zabbix 从2.2.0版本开始支持支持监控VMware 虚拟机的可用性。

Zabbix 可以使用low-level discovery 规则去自动发现 VMware hypervisors and virtual machines 之后创建主机并监控他们, 基于之前定义的主机规则.

在Zabbix默认数据集提供了几个现成的模板或ESX hypervisor监测VMware vCenter。

最小要求VMware vCenter或vSphere的版本是4.1。

详情

虚拟机监控是两个步骤。第一个数据是由VMware收集器Zabbix收集过程。这些过程中获取必要的信息从VMware的Web服务的SOAP协议,预处理并存储到Zabbix服务器共享内存。然后,数据用Zabbix简单检查VMware键对检索。

数据收集从一个单一的Vmware服务通过一个单一的采集进程不能共享到多个数据收集进程。然而,个收集器可以处理多个虚拟机服务。因为推荐使用ESX hypervisor直接整个vCenter服务监控。

配置

Zabbix server 编译的是侯应该使用以下参数: --with-libxml2 and --with-libcurl

下面这些参数可用于虚拟机的监控:

选项                                  区间          默认值     说明

StartVMwareCollectors  0-250            0               Number of pre-forked vmware collector instances.

VMwareCacheSize        256K-2G      8M         Shared memory size for storing VMware data.
A VMware internal check zabbix[vmware,buffer,…] can be used to monitor the VMware cache usage (see Internal checks).
Note that shared memory is not allocated if there are no vmware collector instances configured to start.

VMwareFrequency        10-86400     60         Delay in seconds between data gathering from a single VMware service.
This delay should be set to the least delay period of an

 

发现

Zabbix可以使用low-level 发现规则去自动发现VMware hypervisors and virtual machines.

 

在上面的截图中发现规则的键值是 vmware.hv.discovery[{$URL}].

主机原型

主机原型可以与低层次的发现的规则。当虚拟机被发现,这些原型成为真正主机。原型,在被发现前,不能有自己的项目和触发器,其他链接模板。发现主机将属于一个现有的主机,将现有的主机的IP的主机配置。

在主机原型配置,LLD宏用于主机名称,可见的名称和主机组原型领域。主机状态,现有的主机组和模板连锁等都是不错的选择,可以设置。

发现主机的前缀,创造了他们发现规则的名称,在主机列表。发现主机可以手动删除。发现主机也会被自动删除,以保持失去资源期(天)发现规则的价值。大多数的配置选项是只读的,除了启用/禁用主机和主机库存。发现主机不能有自己的主机的原型。

开始使用模板

在Zabbix默认数据集提供了几个现成的模板,用于监测VMware vCenter或直接ESX hypervisor。

这些模板包含预配置的LLD规则以及监测虚拟设备的一些内置的检查。

请注意:

“模板为VMware”模板可以用于VMware vCenter和ESX hypervisor监测。

“模板为VMware虚拟机管理程序”和“模板为VMware客”模板被发现,通常不应该手动连接到主机。

主机配置

在使用简单检查前需要先定义一下宏命令:

{$URL} - VMware service (vCenter or ESX hypervisor) SDK URL (https://servername/sdk).

{$USERNAME} - VMware service user name

{$PASSWORD} - VMware service {$USERNAME} user password
Example

下面的例子讲述的是如何对VMware主机进行监控

编译zabbix server 必须有一下参数 --with-libxml2 and --with-libcurl

在zabbix server设置StartVMwareCollectors 值为1 或更大

新建主机

设置为VMware认证所需的主机的宏:

关联模板

保存

稍等就会自动出现在主机里了

 

Zabbix 之 web url 监控

1.首先可以在主机模板中先定义一个application

2.找一个关联着这个模板的主机[Configuration -- Hosts ],然后选择这台主机[Web],点击Create scenario

 

Save

3.查看监控状态[Monitoring -- Web]

更多信息请移驾官网:https://www.zabbix.com/documentation/2.4/manual/web_monitoring

 

Zabbix 之windows下安装agent

1.下载windows版zabbix-agent-2.2.5并解压
http://www.zabbix.com/downloads/2.2.5/zabbix_agents_2.2.5.win.zip
解压后有两个目录bin和conf,其中bin中又有两个目录win32和 win64,分别对应windows 32位和64位系统,请根据实际情况将相应目录拷贝到某个磁盘下(我的是64位系统,拷贝win64到C:/下,并重命名为zabbix),然后将另一个conf目录中的配置文件zabbix_agentd.conf也拷贝到c:/zabbix目录下,这样该目录下共有4个文件,分别 为:zabbix_sender.exe zabbix_get.exe zabbix_agentd.exe zabbix_agentd.conf

修改配置文件zabbix_agentd.conf:
Server=192.168.8.81 zabbix_ser/zabbix_proxy IP地址

ServerActive=192.168.8.81:10051
Hostname=Zabbix_windows 本地主机名/IP

2.注册zabbix agent服务
2.1 运行cmd进入windows命令行控制台
2.2 运行c:\zabbix\zabbix_agentd.exe -c c:\zabbix\conf\zabbix_agentd.conf -i
注:-c表示配置文件路径 -i表示安装

3.在命令行运行services.msc进入windows服务控制台,找到zabbix_agent服务,右键启动即可

测试出现入下信息 则安装正确

netstat -an|findstr 10050 查看运行状态
4.卸载zabbix agent
4.1 运行cmd进入windows命令行控制台
4.2 运行c:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.conf -d
注:-c表示配置文件路径 -d表示卸载

注意:关于agent的配置文件,请参考Linux配置进行修改

 

Zabbix之监控Oracle性能

Orabbix 是一个用来监控 Oracle 数据库实例的 Zabbix 插件。

下载地址:http://www.smartmarmot.com/product/orabbix/download/

官方参考:http://www.smartmarmot.com/wiki/index.php/Orabbix

Orabbix插件的安装与配置

确保安装jdk环境,java version查看

[[email protected] ~]# java -version

java version "1.6.0_28"

OpenJDK Runtime Environment (IcedTea6 1.13.0pre) (rhel-1.66.1.13.0.el6-x86_64)

OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)

Zabbix之监控Mysql性能

Zabbix还可以监控mysql slow queries,mysql version,uptime,alive等。下面通过Zabbix Graphs实时查看的SQL语句操作情况和mysql发送接收的字节数。
1.Zabbix官方提供的监控mysql的模板Template App MySQL,可以看到相关的Items和key。

2. 把该模板Template App MySQL Link到相关的主机上面,发现Item的Status是不可用的,因为key的值是通过Mysql用户查看"show global status"信息或者用mysqladmin命令查看status或extended-status的信息而取的值。

mysql> show global status;


3.创建只读 账户zabbix

mysql> insert into mysql.user(Host,User,Password)values("localhost","zabbix",password("yourpasswd"));
mysql> update mysql.user set Select_priv="Y" where user="zabbix" and HOST="localhost";
mysql>flush privileges;
# mysqladmin -uzabbix -p status
Uptime: 3023456 Threads: 16 Questions: 941201 Slow queries: 0 Opens: 491 Flush tables: 1 Open tables: 90 Queries per second avg: 0.311

4.结合官方提供的key编写Shell脚本,从数据库中取出Items的key的值。

# cat /usr/local/zabbix/scripts/checkmysqlperformance.sh

#!/bin/sh

#Modified by Jeffery Aug,18 2014
MYSQL_SOCK="/var/lib/mysql/mysql.sock"
#MYSQL_PWD=`cat /var/lib/mysql/3306/.mysqlpassword`
MYSQL_PWD=yourpasswd

ARGS=1

if [ $# -ne "$ARGS" ];then
echo "Please input one arguement:"
fi

case $1 in
Uptime)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f2 -d":"|cut -f1 -d"T"`
echo $result
;;

Com_update)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_update"|cut -d"|" -f3`
echo $result
;;

Slow_queries)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK status |cut -f5 -d":"|cut -f1 -d"O"`
echo $result
;;

Com_select)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_select"|cut -d"|" -f3`
echo $result
;;

Com_rollback)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
echo $result
;;

Questions)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;

Com_insert)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_insert"|cut -d"|" -f3`
echo $result
;;

Com_delete)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_delete"|cut -d"|" -f3`
echo $result
;;

Com_commit)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_commit"|cut -d"|" -f3`
echo $result
;;

Bytes_sent)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
echo $result
;;

Bytes_received)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
echo $result
;;

Com_begin)
result=`mysqladmin -uzabbix -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_begin"|cut -d"|" -f3`
echo $result
;;

*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)"
;;

esac

4.在Zabbix_agentd.conf里面添加UserParameter,格式如下,对于Zabbix来说,脚本其实就是一个插件。

# cat /usr/local/zabbix/etc/zabbix_agentd.conf| grep -v "^$\|^#"

LogFile=/tmp/zabbix_agentd.log

Server=172.16.9.38

ServerActive=172.16.9.38:10051

Hostname=172.16.9.26

UnsafeUserParameters=1

UserParameter=mysql.version,mysql -V

UserParameter=mysql.ping,mysqladmin -uzabbix -p\[email protected] -S /var/lib/mysql/mysql.sock ping | grep -c alive

UserParameter=mysql.status[*],/usr/local/zabbix/scripts/checkmysqlperformance.sh $1

5.重启agentd服务器

/etc/init.d/zabbix_agentd restart

6.然后在zabbix server用zabbix_get就可以取到key的值。

# /usr/local/zabbix/bin/zabbix_get -s 172.16.9.26 -p10050 -k mysql.status[Uptime]
3386849

# /usr/local/zabbix/bin/zabbix_get -s 172.16.9.26 -p10050 -k mysql.status[Com_select]
275188

6.在zabbix前端可以实时查看SQL语句每秒钟的操作次数。

7.在zabbix前端可以实时查看mysql发送接收的字节数。其中bytes received表示从所有客户端接收到的字节数,bytes sent表示发送给所有客户端的字节数。

总结:
1)把该脚本放到要监控的服务器上面(Modify mysql user and password),修改UserParameter的参数并重启agentd,Link官方提供的Template App MySQL模板即可。
2)我这里是测试环境用的是新创建的只读账户zabbix,线上服务器安全期间可以给mysql用户授权readonly权限。

3)根据实际的需求,除了监控上述监控项之外,还可以监控mysql processlist,Innodb等。