设为首页 收藏本站
查看: 2322|回复: 0

[经验分享] nagios监控标准端口,非标准端口;监控httpd,监控weblogic;监控CPU,内存,硬盘,网卡流量

[复制链接]

尚未签到

发表于 2015-9-8 10:04:34 | 显示全部楼层 |阅读模式
  ....
  监控标准端口
  ########################
  监控非标准端口
  http://hx100.blog.iyunv.com/44326/369427

某一台服务器需要监控4000端口
修改 /usr/local/nagios/etc/objects/commands.cfg  添加一个服务名



# check port 4000
define command{
        command_name    4000
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 4000 $ARG2$
        }

然后修改linux的模板

vim  /usr/local/nagios/etc/objects/web1.cfg   添加一段


# Define a service to check HTTP on the local machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled.
define service{
        use                             local-service         ; Name of service template to use
        host_name                     web1
        service_description            4000
        check_command                  4000
                is_volatile                     0
        check_period                    24x7
        max_check_attempts              2
        normal_check_interval           1
        retry_check_interval            1
        contact_groups                  admins
        notification_options            w,u,c,r
        notification_interval           960
        notification_period             24x7
        }  本文出自 “无云安全技术站” 博客,请务必保留此出处http://hx100.blog.iyunv.com/44326/369427
  
  http://www.lingang.gd.cn/?action=show&id=198
  如果要检查非标准端口(比如,ftp开在了22222端口上),也是修改commands.cfg文件,对check_ftp的声明修改增加-p参数即可。
# 'check_ftp' command definition
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ -p $ARG1$
        }
  默认大多数可以直接加端口,第一步可以不管      
再把test.cfg中,对应服务的检测命令后面加一个端口号的参数:
define service {
host_name ...
...
check_command check_ftp!22222
}
这就可以对22222端口的FTP进行监控,要添加多个参数,也可以如法炮制。
  define service{
        use     generic-service
        host_name       webserver
        service_description     SSH
        check_command   check_ssh! -p 1500!远程被监控服务器IP或者localhost
}
  
  http://bbs.chinaunix.net/thread-1467863-1-1.html
  我也最近才开始装nagios的。好像官方默认带的pluging文件都是编译好的不能修改,用守住每一天大侠的脚本就可以了
http://bbs.chinaunix.net/viewthread.php?tid=1416669
不好意思,我明白了官方的自带的pluging的配置文件其实你可以根据commands.cfg里指定的来设置一些参数,比如
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }

define command{
        command_name    check_ssh
        command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
那你就可以在localhost.cfg
define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             SSH
        check_command                   check_ssh! -p 22!192.168.0.123
        notifications_enabled           0
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             HTTP
        check_command                   check_http! -I 192.168.0.123!80
        notifications_enabled           0
        }
  
  搞定!
define service{
        use     generic-service
        host_name       webserver
        service_description     SSH
        check_command   check_ssh! -p 1500!远程被监控服务器IP
}
谢谢!那个链接内容太多了,还来不及看守住前辈的大作,在nagios web页面看到的错误,慢慢修改过来居然好了!找个时间慢慢细研守住前辈的心血,呵呵。
  
  
  http://blog.163.com/herod_xiao/blog/static/87188399200962214633436/
  最近配置了nagios系统,也监控了公司相关行情服务器程序;基本上socket(收发通信协议)写的程序都会对应一个tcp端口出来,我们只要监控此端口就相当监控了此程序;如FTP 21 pop 110 smtp 25 这些是常见的tcp端口,常见的端口一般nagios内都有定义的check_command ,如果不是常见的端口,自定义的程序的tcp端口该如何设置呢?这是大多配置完Nagios后遇到的很严重的问题,我也遇到了,在多亏网友(守住每一天)帮忙得以解决,下面就让我分享给大家;我是怎样解决此问题的;
  所有nagios配置完成后,下面我们要监控咱们公司服务器上的一个产品程序,此程序对应多个tcp端口,我们这里就拿一个tcp端口9000来说;
  配置 # vi /usr/local/nagios/etc/nagios.cfg
添加cfg_file=/usr/local/nagios/etc/objects/ps2008_ip51.cfg
  新增配置文件 #vi /usr/local/nagios/etc/objects/ps2008_ip51.cfg
  define host{
use linux-server
host_name ps2008_ip51
alias ps2008_ip51
address 210.73.*.*
}
define service{
use generic-service
host_name ps2008_ip51
service_description SSH
check_command check_ssh
}
define service{
use generic-service
host_name ps2008_ip51
check_period 24x7
max_check_attempts 3
normal_check_interval 30
retry_check_interval 15
notification_interval 300
notification_period 24x7
notification_options w,u,c,r
service_description TCP9000
check_command check_tcp!9000
}
  重启nagios 配置完成,看看如下效果图,呵呵
  各位如果有问题可以给我留言!
DSC0000.jpg
  完!
  原创于2009-7-22 网友转载记得带上http://blog.163.com/herod_xiao/blog
  
  
  #########################
  监控httpd
  http://www.uddtm.com/os/linux/NagiosjiankongHTTPfuwudeshiyonghecanshumiaoshu.php
  监控主机设定文件
define host{
       use linux-server; 继承模板中linux-server的监控参数
       host_name remotehost1 ; 主机名称
       alias Some Remote Host ; 别名
       address 192.168.200.10; IP地址
       hostgroups allhosts ; 所属主机群组
}
  在nagios的官方配置文件中,是使用generic-host来作为继承参数。我在实际测试中发现无法通过nagios监测,提示错误为Error: Invalid max_check_attempts value for host 'remotehost1'
即使添加了这个参数,还是会提示警告信息 Warning: Host 'remotehost1' has no default contacts or contactgroups defined!
  关于这两个模板的差异,我会在之后的文档里面进行进一步的比较和说明

HTTP监控配置文件描述
define service{
        use             generic-service
        host_name       remotehost1
        service_description     httpmonitor
        check_command   check_http
        }
这样就能够监控http服务了

确认一下/usr/local/nagios/etc/object/command.cfg 是否有关于check_http的指令
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }
  监控http服务参数描述
  check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>][-w <warn time>] [-c <critical time>] [-t <timeout>] [-L][-a auth] [-f <ok | warn | critcal | follow>] [-e <expect>][-s string] [-l] [-r <regex> | -R <case-insensitive regex>][-P string][-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>] [-A string][-k string] [-S] [-C <age>] [-T <content-type>]
  
常用参数
-H 用于虚拟主机,并可以增加端口。例如,test.com:10000
-I IP地址
-S 基于SSL连接。默认端口为443
-u URL地址
-w 警告响应时间 响应时间超过指定时间则显示WARNING
-c 临界报警响应时间 响应时间超过设定时间则显示CRITICAL
-p 端口设定
-e 监测服务器反馈的第一行(状态)信息是否包含匹配字符
-N 不读取body部分,在读取header信息
-t timeout时间值  
-v 显示服务器反馈的所有信息  
-r 正则表达式匹配反馈页信息
-R 同上,但可以不考虑大小写问题
--invert-regex 反馈信息中包含字符则报警
-L 反馈信息包含URL link
-a 对需要基础认证的,提供用户名和密码,获取反馈值

#监控域名的反馈
  ./check_http -H www.sina.com.cn
  #监测该IP的10000端口,并且使用SSL协议
  ./check_http -I 192.168.200.1 -S -p 10000
  #监测反馈的第一行信息中是否包含302,可以作为web程序反馈信息检测
  ./check_http -I 192.168.200.1 -S -p 10000 -e 302
  #对该IP的指定URL进行检测
  ./check_http -I 192.168.200.10 -u /session_login.cgi
  #检测域名,并且只获取header部分。这样可以加快检测响应时间,对大量web服务进行检测时,可以降低nagios服务器负载
  ./check_http -H www.sina.com.cn -N
  #检测反馈页的生成时间是否超过10小时
  ./check_http -H www.sina.com.cn -M 10h
  #在监测新浪网站是反馈时间超过5秒警告,超过10秒报警
  ./check_http -w 5 -c 10 -H www.sina.com.cn
  #检测新浪网反馈页的时间超过5秒,就反馈CRITICAL - Socket timeout after 1 seconds
  ./check_http -t 5 -H www.sina.com.cn
  #显示反馈的所有信息,包含整个页面的信息
  ./check_http  -H www.sina.com.cn  -v
  #对需要帐户密码登录的网站,使用-a参数来进行登录。正确则显示HTTP OK,否则显示HTTP WARNING
  ./check_http  -I 192.168.200.249 -u /nagios/ -a nagiosadmin:123456

参考资料  http://nagiosplugins.org/man/check_http
http://blog.chinaunix.net/u3/93482/showart_1876495.html
  http://yunhaozou.org/monitor/103.html
  

用nagios的插件check_http可以方便监控各种web页面,当有故障或者异常时,第一时间发出告警,从而快速地发现问题,解决故障。最终提高网站的可用性。  

check_http –help  

Usage: check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>]  

[-w <warn time>] [-c <critical time>] [-t <timeout>] [-L]  

[-a auth] [-f <ok | warn | critcal | follow | sticky | stickyport>]  

[-e <expect>] [-s string] [-l] [-r <regex> | -R <case-insensitive regex>]  

[-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>]  

[-A string] [-k string] [-S] [-C <age>] [-T <content-type>] [-j method]  

其中我在工作中常用的参数如下:  

-H, –hostname=ADDRESS:域名或者被监控机IP(监控主机要有DNS)  

-I, –IP-address=ADDRESS:被监控机 IP (当监控主机没有DNS时用)  

-p, –port=INTEGER:http服务端口,默认为80  

-e, –expect=STRING  

Comma-delimited list of strings, at least one of them is expected in the first (status) line of the server response (default: HTTP/1.) If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)  

-u, –url=PATH:URL to GET or POST (default: /)  

-s, –string=STRING:String to expect in the content  

举例:  

1.监控192.168.9.4机器http服务使用情况  

/usr/lib64/nagios/plugins/check_http -I 192.168.9.4  

HTTP OK: HTTP/1.1 302 Found – 619 bytes in 0.009 second response time |time=0.008873s;;;0.000000 size=619B;;;0  

2.监控192.168.120.2机器http9090端口服务的使用情况  

/usr/lib64/nagios/plugins/check_http -I 192.168.120.2 -p 9090  

HTTP WARNING: HTTP/1.1 403 Forbidden  

3.监控192.168.120.2机器http9090端口服务的使用情况,当http返回200,403时,nagios返回OK  

/usr/lib64/nagios/plugins/check_http -I 192.168.120.2 -p 9090 -e 403,200  

HTTP OK HTTP/1.1 403 Forbidden – 389 bytes in 0.004 seconds |time=0.003794s;;;0.000000 size=389B;;;0  

4.监测www.twitter.com能否访问;  

/usr/lib64/nagios/plugins/check_http -H www.twitter.com  

CRITICAL – Socket timeout after 10 seconds  

5.监测http://123.112.137.221:10009/nagios/能否访问;  

/usr/lib64/nagios/plugins/check_http -I 123.112.137.221 -p 10009 -u /nagios/  

HTTP WARNING: HTTP/1.1 401 Authorization  


6.检测http://www.abc.com/search.aspx?name=abc&id=100能否访问
/usr/lib64/nagios/plugins/check_http -H www.abc.com -u “/search.aspx?name=abc&id=100&Prime;
HTTP OK: HTTP/1.1 301 Moved Permanently – 486 bytes in 0.567 second response time |time=0.567176s;;;0.000000 size=486B;;;0
————————————————————————————————-
自己写监控插件
监控http页面也可以自己写监控插件实现。如监控http://www.ip138.com/ips.asp?ip=218.204.252.127 的情况。可以通过curl命令下载网页,再根据http返回情况写脚本来实现监控。下面是实现方式:  

1.监控http返回状态  

curl -o /dev/null -s -w %{http_code} http://www.ip138.com/ips.asp?ip=218.204.252.127  

-o 把下载的所有内容都重定向到/dev/null,-s命令,屏蔽了curl本身的输出,而-w参数,是根据我们自己的需要,自定义了curl的输出格式。这里输出http的返回状态码。  

2.监控web站点的响应时间  

curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.ip138.com/ips.asp?ip=218.204.252.127  

其中:  

time_connect表示建立到服务器的 TCP 连接所用的时间  

time_starttransfer表示在发出请求之后,Web 服务器返回数据的第一个字节所用的时间  

time_total表示完成请求所用的时间  

3.check_dthttp脚本  

cat check_dthttp  

#!/bin/bash  

# Using to check dongtai http.  

# Made by yunhaozou@gmail.com, 2010/11/21.  

status[0]=”OK: “  

status[1]=”WARNING: “  

status[2]=”CRITICAL: “  

status[3]=”UNKNOWN: “  

if [ $# -lt 2 ]  

then  

echo “Usage:$0 -u url”  

exit 777  

fi  

httpcode=`curl -o /dev/null -s -w %{http_code} $2`  

if [ $httpcode -eq "200" ]  

then  

status=0  

echo “OK – http $httpcode.”  

exit 0  

else  

status=2  

echo “Critical – http $httpcode.”  

exit 2  

fi  

4.监控  

通过nrpe的方式实现:  

cat /etc/nagios/nrpe.cfg  

command[check_ip138]=/usr/lib64/nagios/plugins/check_dthttp -u http://www.ip138.com/ips.asp?ip=218.204.252.127  

——————————————————————————————————————————  

HTTP协议返回状态码表  

1**:请求收到,继续处理  

2**:操作成功收到,分析、接受  

3**:完成此请求必须进一步处理  

4**:请求包含一个错误语法或不能完成  

5**:服务器执行一个完全有效请求失败  

————-  

100——客户必须继续发出请求  

101——客户要求服务器根据请求转换HTTP协议版本  

200——交易成功  

201——提示知道新文件的URL  

202——接受和处理、但处理未完成  

203——返回信息不确定或不完整  

204——请求收到,但返回信息为空  

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件  

206——服务器已经完成了部分用户的GET请求  

300——请求的资源可在多处得到  

301——删除请求数据  

302——在其他地址发现了请求数据  

303——建议客户访问其他URL或访问方式  

304——客户端已经执行了GET,但文件未变化  

305——请求的资源必须从服务器指定的地址得到  

306——前一版本HTTP中使用的代码,现行版本中不再使用  

307——申明请求的资源临时性删除  

————–  

400——错误请求,如语法错误  

401——请求授权失败  

402——保留有效ChargeTo头响应  

403——请求不允许  

404——没有发现文件、查询或URl  

405——用户在Request-Line字段定义的方法不允许  

406——根据用户发送的Accept拖,请求资源不可访问  

407——类似401,用户必须首先在代理服务器上得到授权  

408——客户端没有在用户指定的饿时间内完成请求  

409——对当前资源状态,请求不能完成  

410——服务器上不再有此资源且无进一步的参考地址  

411——服务器拒绝用户定义的Content-Length属性请求  

412——一个或多个请求头字段在当前请求中错误  

413——请求的资源大于服务器允许的大小  

414——请求的资源URL长于服务器允许的长度  

415——请求资源不支持请求项目格式  

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求  

也不包含If-Range请求头字段  

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下  

一级服务器不能满足请求  

—————  

500——服务器产生内部错误  

501——服务器不支持请求的函数  

502——服务器暂时不可用,有时是为了防止发生系统过载  

503——服务器过载或暂停维修  

504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长  

505——服务器不支持或拒绝支请求头中指定的HTTP版本  
本文出自孤风颠影|网站运维 网址:http://yunhaozou.org/monitor/103.html.转载请保留.
  
  
  
  ##########################
  监控weblogic
  
  http://skymax.blog.iyunv.com/365901/101603/
  http://skymax.blog.iyunv.com/365901/258593

通过Nagios监控Weblogic服务

1. 前言
本文主要介绍如何通过Nagios软件来监控Weblogic服务运行状况,其中主要包括Weblogic Server以及Weblogic JDBC Pool的运行状态。Nagios的插件中本身并不提供对于Weblogic服务监控的功能,所以要根据Nagios Plugin API编写自己的脚本,扩展其插件,完成我们所需要的功能。对于Weblogic运行状态信息的获得需通过JMX。
本文参考了Nagios3的官方文档中有关Nagios Plugin部分,以及Weblogic官方文档有关JMX和命令行部分,具体的Weblogic版本是8.14。

2. Nagios Plugin API概述
作为一个Nagios插件,无论你是用脚本(如shell、perl)还是用c编译后的可执行程序实现,它必须至少完成两件事,
1、退出时有一个返回值。
2、至少向标准输出设备(STDOUT)输出一行文本。
返回值定义:

Plugin Return Code

Service State

Host State

0

OK

UP

1

WARNING

UP or DOWN/UNREACHABLE*

2

CRITICAL

DOWN/UNREACHABLE

3

UNKNOWN

DOWN/UNREACHABLE

输出文本至少要一行,其信息主要反映被监控应用、服务的状态。
例如:DISK OK - free space: / 3326 MB (56%);

3. 监控Weblogic的实现方法
对于Weblogic运行状况的获得,我们是通过命令行的方式实现的,通过调用Weblogic的weblogic.Admin类实现的。这个类的功能很强大,可以通过它管理和配置Weblogic。
以下介绍几个常用的命令写法。
1、获得server运行状态

$ java weblogic.Admin -url ${URL} -username ${USER_NAME} -password ${PASS_WORD} get -pretty \
        -mbean "${DOMAIN_NAME}:Location=${SERVER_NAME},Name=${SERVER_NAME},Type=ServerRuntime”


2、获得JDBC Pool运行状态

$ java weblogic.Admin -url ${URL} -username ${USER_NAME} -password ${PASS_WORD} GET -pretty \
        -mbean "${DOMAIN_NAME}:Location=${SERVER_NAME},Name=${POOL_NAME},ServerRuntime=
${SERVER_NAME},Type=JDBCConnectionPoolRuntime"

将黄色标记部分的变量替换成相应真实环境值即可。

${URL}

weblogic的URL,例如t3://192.168.1.2:7002

${USER_NAME}

用户名

${PASS_WORD}

密码

${DOMAIN_NAME}

weblogic域的名称,如mydomain

${SERVER_NAME}

Server名

${POOL_NAME}

JDBC Pool名称

在运行上述命令前需要设置JAVA_HOME,并且将$JAVA_HOME/bin添加到PATH中,将weblogic的weblogic81/server/lib/weblogic.jar包添加到CLASSPATH中。

4. 具体实现的shell脚本
有了监控的方法,根据Nagios Plugin API规则编写自己的shell实现脚本。具体的shell脚本如下:
check_wls.sh

#!/bin/ksh

#check_wls.sh --jdbcpool url username password domainname servername poolname
#check_wls.sh --server url username password domainname servername


PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION=`echo '$Revision: 1749 $' | sed -e 's/[^0-9.]//g'`

. $PROGPATH/utils.sh

print_usage() {
  echo "Usage:"
  echo "  $PROGNAME --jdbcpool url username password domainname servername poolname
  echo "  $PROGNAME --server url username password domainname servername
  echo "  $PROGNAME --help"
  echo "  $PROGNAME --version"
}

print_help() {
  print_revision $PROGNAME $REVISION
  echo ""
  print_usage
  echo ""
  echo "Check Weblogic status"
  echo ""
  echo "--jdbcpool url username password domainname servername poolname"
  echo "   Check Weblogic JDBC Pool"
  echo "--server url username password domainname servername"
  echo "   Check Weblogic Server"
}

if [[ -z "$JAVA_HOME" ]]
then
  echo "Please set JAVA_HOME!"
  exit $STATE_UNKNOWN
fi

if [[ -z "$CLASSPATH" ]]
then
  echo "Please set CLASSPATH!"
  exit $STATE_UNKNOWN
else
  echo $CLASSPATH | grep "weblogic.jar" | wc -l | read N
  if [[ "$N" = "0" ]]
  then
    echo "Please add weblogic.jar to CLASSPATH!"
    exit $STATE_UNKNOWN
  fi
fi

PATH=$JAVA_HOME/bin:$PATH
export PATH

JDBC_TYPE="JDBCConnectionPoolRuntime"
SERVER_TYPE="ServerRuntime"

cmd="$1"

# Information options
case "$cmd" in
--help)
    print_help
    exit $STATE_OK
    ;;
-h)
    print_help
    exit $STATE_OK
    ;;
--version)
    print_revision $PROGNAME $REVISION
    exit $STATE_OK
    ;;
-V)
    print_revision $PROGNAME $REVISION
    exit $STATE_OK
    ;;
esac

case "$cmd" in
--server)
    URL=${2}
    USER_NAME=${3}
    PASS_WORD=${4}
    DOMAIN_NAME=${5}
    SERVER_NAME=${6}
    SERVER_INFO="${DOMAIN_NAME}:${SERVER_NAME}"
   
    RE=`java weblogic.Admin -url ${URL} -username ${USER_NAME} -password ${PASS_WORD} get -pretty \
        -mbean "${DOMAIN_NAME}:Location=${SERVER_NAME},Name=${SERVER_NAME},Type=${SERVER_TYPE}"`
    printf "${RE}" | grep ^"-" | wc -l | read N
   
    if [[ "$N" -lt  "1" ]]
    then
      #error
      printf "${RE}" | awk '{ printf $0 }' | read ERR_INFO
      echo "CRITICAL - ${ERR_INFO}"
      exit $STATE_CRITICAL     
    fi
   
    if [[ "$N" -ge  "1" ]]
    then
      HEALTH_STATE=""   
      RUN_STATE=""
      #HealthState State
      printf "${RE}" | while read NAME VALUE
      do
        #PoolState WaitingForConnectionCurrentCount State
        #echo "NAME:${NAME} VALUE:${VALUE}"
        case "${NAME}" in
        HealthState:)
          HEALTH_STATE=${VALUE}
        ;;
        State:)
          RUN_STATE=${VALUE}
        ;;
        esac
      done
     
      #echo "HEALTH_STATE:${HEALTH_STATE}"
      #echo "RUN_STATE:${RUN_STATE}"
     
      HEALTH_STATE_INFO=${HEALTH_STATE}
     
      echo ${HEALTH_STATE_INFO} | awk -F, '{ print $1 }' | awk -F: '{ print $2 }' | read HEALTH_STATE
           
      #echo "HEALTH_STATE:${HEALTH_STATE}"
      #HEALTH_OK HEALTH_WARN HEALTH_CRITICAL HEALTH_FAILED
     
      if [[ "${RUN_STATE}" != "RUNNING" ]]
      then
        echo "CRITICAL - ${SERVER_INFO} State is ${RUN_STATE}"
        exit $STATE_CRITICAL
      fi
     
      case "${HEALTH_STATE}" in
      EALTH_OK)
      
      ;;
      HEALTH_WARN)
        echo "WARN - ${SERVER_INFO} HealthState is ${HEALTH_STATE_INFO}"
        exit $STATE_WARNING
      ;;
      HEALTH_CRITICAL)
        echo "CRITICAL - ${SERVER_INFO} HealthState is ${HEALTH_STATE_INFO}"
        exit $STATE_CRITICAL
      ;;
      HEALTH_FAILED)
        echo "FAILED - ${SERVER_INFO} HealthState is ${HEALTH_STATE_INFO}"
        exit $STATE_CRITICAL
      ;;
      esac
     
    fi
    echo "OK - ${SERVER_INFO} State is ${RUN_STATE},HealthState is ${HEALTH_STATE_INFO}"
    exit $STATE_OK
  ;;
--jdbcpool)
    URL=${2}
    USER_NAME=${3}
    PASS_WORD=${4}
    DOMAIN_NAME=${5}
    SERVER_NAME=${6}
    POOL_NAME=${7}
    POOL_INFO="${DOMAIN_NAME}:${SERVER_NAME}:${POOL_NAME}"
    RE=`java weblogic.Admin -url ${URL} -username ${USER_NAME} -password ${PASS_WORD} GET -pretty \
        -mbean "${DOMAIN_NAME}:Location=${SERVER_NAME},Name=${POOL_NAME},ServerRuntime=${SERVER_NAME},Type=${JDBC_TYPE}"`
   
    printf "${RE}" | grep ^"-" | wc -l | read N
   
    if [[ "$N" -lt  "1" ]]
    then   
      #error
      printf "${RE}" | awk '{ printf $0 }' | read ERR_INFO
      echo "CRITICAL - ${ERR_INFO}"
      exit $STATE_CRITICAL
    fi
   
    if [[ "$N" -ge  "1" ]]
    then
      POOL_STATE=""
      WAIT_CNT=""
      RUN_STATE=""
      printf "${RE}" | while read NAME VALUE
      do
        #PoolState WaitingForConnectionCurrentCount State
        #echo "NAME:${NAME} VALUE:${VALUE}"
        case "${NAME}" in
        PoolState:)
          POOL_STATE=${VALUE}
        ;;
        WaitingForConnectionCurrentCount:)
          WAIT_CNT=${VALUE}
        ;;
        State:)
          RUN_STATE=${VALUE}
        ;;
        esac
      done
      #echo "POOL_STATE:${POOL_STATE}"
      #echo "WAIT_CNT:${WAIT_CNT}"
      #echo "RUN_STATE:${RUN_STATE}"
      if [[ "${POOL_STATE}" != "true" ]]
      then
        echo "CRITICAL - ${POOL_INFO} PoolState is ${POOL_STATE}"
        exit $STATE_CRITICAL
      fi
     
      if [[ "${RUN_STATE}" != "Running" ]]
      then
        echo "CRITICAL - ${POOL_INFO} State is ${RUN_STATE}"
        exit $STATE_CRITICAL
      fi
     
      if [[ "${WAIT_CNT}" -gt "0" ]]
      then
        echo "WARNING - ${POOL_INFO} WaitingForConnectionCurrentCount is ${WAIT_CNT}"
        exit $STATE_WARNING
      fi
     
    else
      #error
      printf "${RE}" | awk '{ printf $0 }' | read ERR_INFO
      echo "CRITICAL - ${ERR_INFO}"
      exit $STATE_CRITICAL
    fi
    echo "OK - ${POOL_INFO} State is ${RUN_STATE},PoolState is ${POOL_STATE},WaitingForConnectionCurrentCount is ${WAIT_CNT}"
    exit $STATE_OK
    ;;
*)
    print_usage
    exit $STATE_UNKNOWN
    ;;
esac


5. 配置Weblogic监控
将check_wls.sh上传到Nagios软件的libexec目录下,并创建一个ln文件check_wls。

$ ln -s ./check_wls.sh ./check_wls

在nrpe的配置文件中增加相关的命令定义。
Weblogic的具体配置信息如下,

${URL}

t3://172.17.1.2:7001

${USER_NAME}

weblogic

${PASS_WORD}

weblogic

${DOMAIN_NAME}

mydomain

${SERVER_NAME}

myserver

${POOL_NAME}

mypool

编辑nrpe.cfg文件,增加如下内容,

$ vi ./nrpe.cfg
... .... ... .... ... .... ... .... ... .... ... ....
#check weblogic [check_wls]
command[check_wls_server_myserver]=/usr/local/nagios//libexec/check_wls --server t3://172.2.10.2:7001 weblogic weblogic mydomain myserver

command[check_wls_jdbcpool_mypool]=/usr/local/nagios//libexec/check_wls --jdbcpool t3://172.2.10.2:7001 weblogic weblogic mydomain myserver mypool

在nrpe的启动脚本中添加环境变量(CLASSPATH、JAVA_HOME)

... .... ... .... ... .... ... .... ... .... ... ....
JAVA_HOME=/data/bea/bea/jdk142_05
export JAVA_HOME
CLASSPATH=/data/bea/bea/weblogic81/server/lib/weblogic.jar
export CLASSPATH
... .... ... .... ... .... ... .... ... .... ... ....

编辑监控主机的nagios.cfg文件,添加如下内容。

$ vi ./nagios.cfg
... .... ... .... ... .... ... .... ... .... ... ....
# Define a host for the local machine

define host{
        use                     linux-box            ; Name of host template to use
              ; This host definition will inherit all variables that are defined
              ; in (or inherited by) the linux-server host template definition.
        host_name               sol_172.2.10.2
        alias                   sol_172.2.10.2
        address                 172.2.10.2
        }

#the check_wls_server_myserver on the remote host.
define service{
        use                     generic-service
        host_name               sol_172.2.10.2
        service_description     Weblogic Server myserver
        check_command           check_nrpe!check_wls_server_myserver
        }
      
#the check_wls_jdbcpool_mypool on the remote host.
define service{
        use                     generic-service
        host_name               sol_172.2.10.2
        service_description     Weblogic JDBCPool mypool
        check_command           check_nrpe!check_wls_jdbcpool_mypool
        }

验证配置是否正确。
重启监控主机上的nagios服务以及远程主机上的nrpe服务。
通过IE观察监控情况。


图5.1


就此配置工作完成。
6. 结语
本文介绍了一种通过Nagios监控Weblogic应用的实现方式,按照Nagios Plugin API规则编写自己的Shell脚本实现该功能,并简单的描述了配置过程,提供了Shell源码。希望大家指正。  本文出自 “sky” 博客,请务必保留此出处http://skymax.blog.iyunv.com/365901/101603
  
  之前的文章中介绍了如何通过编写自己的脚本,并通过Nagios监控Weblogic服务。近日在实践中配置该监控,发现了之前脚本中的一些不足,进行了脚本修改。现将脚本共享。
   
    脚本的名称是check_weblogic.sh,可以建立一个软link check_weblogic
   
    1、使用的方法如下,
    check_weblogic.sh -H host -p port -v '--type [jdbcpool|server] --username username --password password --domain domainname --server servername [--pool poolname]'
   
    其中,
    host -- 主机名/IP
    port -- weblogic server的端口号   
    -v后面的参数是具体的监控内容,可监控server和jdbcpool。
    一共三个参数。
   
    例如    ,
    要监控的weblogic配置情况如下
    例1
    主机IP:192.168.10.1
    端口:9503
    域:mydomain
    server:myserver
    用户名和密码:weblogic/weblogic
    则,监控命令如下,
    ./check_weblogic.sh -H 192.168.10.1 -p 9503 -v '--type server --username weblogic --password weblogic --domain mydomain --server myserver'
    运行结果
    OK - mydomain:myserver State is RUNNING,HealthState is State:HEALTH_OK,ReasonCode:[,]
   
    2、将其配置到Nagios中
    首先需要修改${NAGIOS_HOME}/etc/objects/commands.cfg,增加一个命令配置。
    添加如下内容,   
    # 'check_weblogic' command definition
    define command{
        command_name    check_weblogic
        command_line    $USER1$/check_weblogic -H $HOSTADDRESS$ -p $ARG1$ -v "$ARG2$"
        }
    其中,HOSTADDRESS是主机IP,ARG1是端口号,ARG2是监控内容
   
    然后就可以定义service了,我们通过一个例子来说明,监控的是“例1”中weblogic实例,具体的配置应如下,
    define service{
        use                     generic-service
        host_name               linux_192.168.10.1
        service_description     Weblogic myserver
        check_command           check_weblogic!9503!--type server --username weblogic --password weblogic --domain mydomain --server myserver
        }
    其中,linux_192.168.10.1是之前配置过的一个主机。
   
    3、其他
    当然如果你使用NRPE来获得被监控主机的信息,那么配置上就没这么繁琐了,至少commands.cfg的配置就省去了,可以直接将监控的内容配置成nrpe.cfg中的command就行了,例如,
    command[check_wls_mydomain_myserver]=/usr/local/nagios/libexec/check_weblogic -H 192.168.10.1 -p 9503 -v '--type server --username weblogic --password weblogic --domain mydomain --server myserver'
    Nagios端直接通过check_nrpe调用该command就可以获得相应server的健康情况了。
   
   
         
  本文出自 “sky” 博客,请务必保留此出处http://skymax.blog.iyunv.com/365901/258593
  ========================================
  http://www.cnblogs.com/firstyi/archive/2007/09/24/904285.html
weblogic中snmp的使用



一些概念:
SNMP:简单网络管理协议,SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。目前, SNMP 有 3 种: SNMPV1 、 SNMPV2 、 SNMPV3。第 1 版和第 2 版没有太大差距,但 SNMPV2 是增强版本,包含了其它协议操作。与前两种相比, SNMPV3 则包含更多安全和远程配置。为了解决不同 SNMP 版本间的不兼容问题, RFC3584 种定义了三者共存策略。
SNMP OID:SNMP Object Identifiers(对象标示符),SNMP对象标识符(OID)是定义在特定MIB模式中的值,来定义一个特定的在MIB数据库中SNMP目标。SNMP OID是划界序列数字组成a.b.c...x.y.z的周期。它对信息的一个项目是一个独特的标识符,其是一个MIB的一部分。典型的OIDs能够有与它们相关的名字。OIDs在自然中是分等级的。因此1.2.3出现在1.3之前但是在1.2之后。MIB 会为其描述的每个受管对象分配一个唯一的、不可变的编号,称为对象标识符(Object Identifier,简称 OID)。每个 OID 包含一个从左到右的整数序列。此序列定义 MIB 树中的对象的位置,并指定通过树到达此对象的唯一路径。此路径中的每个节点均有一个编号和一个与编号关联的名称。
    路径 .1.3.6.1.4.1 定义 private.enterprises OID,树上此节点下的每个编号代表树中为特定供应商(如 BEA)保留的分支。BEA MIB 注册在树中的位置 .1.3.6.1.4.1.140,WebLogic Server MIB 包含 .1.3.6.1.4.1.140.625 下的所有 OID
管理信息库(MIB)是一个具有分层特性的信息的集合,我们可以通过 SNMP 去存取它。MIB 的成员是一些被管理的对象(Managed Object),以对象标示符(Object Identifiers)来区分它们。

在bea目录下有一个BEA-WEBLOGIC-MIB.asn1文件,保存了snmp的配置,具体配置的含义可以参照:http://e-docs.bea.com/wls/docs81/snmp/index.html
如果想加入自己的OID,可以将将OID 相应的包放到 %WL_HOME%\server\lib\mbeantypes 目录下就可以了(这个我也没有试过)
要使用weblogic的snmp功能首先要在weblogic的控制台中启用snmp功能,然后就可以使用oid来获得堆栈、内存等使用信息了
在Services/SNMP下:
DSC0001.jpg
在weblogic中提供了1万多的oid可以给第三方软件使用,我们也可以使用unix自带的snmpwalk命令去取得各个oid的值,以下列出几个例子:

DSC0002.gif # jvm runtime Heap size
snmpwalk -v 2c -c public 192.168.88.160:161 .1.3.6.1.4.1.140.625.340.1.30

#host used memory (by jrockit jdk)
snmpwalk -v 2c -c public 192.168.88.160:161 1.3.6.1.4.1.140.625.302.1.40

#The number of idle threads assigned to the queue
snmpwalk -v 2c -c public 192.168.88.160:161 1.3.6.1.4.1.140.625.180.1.25.32.48.101.49.102.50.102.52.97.51.101.102.102.100.98.57.56.55.53.57.54.56.98.98.101.51.53.54.100.101.52.57.53

#The date and time that the longest waiting request was placed in the queue --900563304
snmpwalk -v 2c -c public 192.168.88.160:161 .1.3.6.1.4.1.140.625.180.1.30.32.48.101.49.102.50.102.52.97.51.101.102.102.100.98.57.56.55.53.57.54.56.98.98.101.51.53.54.100.101.52.57.53
  其中第二个oid和jrockit有关,所有和jrockit有关的oid在默认情况下都是不可以使用的,必须在weblogic启动时将jdk改为jrockit jdk才可以,这个是bea公司自己的jdk
在java中我们也可以使用snmp4j去存取snmp的值,进行远程控制,下面一段代码就是用来取得所有的oid的:

package test;

import java.io.IOException;
import java.net.InetAddress;

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

DSC0003.gif public class test1{
DSC0004.gif
    public static void main(String[] args)
DSC0005.gif     {
        try{
            Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
            CommunityTarget target = new CommunityTarget();//agent对象
            target.setCommunity(new OctetString("public"));//设置共同体名,没发现设置RWCommnity的方法,大概只能设一个.
            
            target.setVersion(SnmpConstants.version1);//设置版本
            target.setAddress(new UdpAddress("127.0.0.1/161"));//设置IP地址和端口号,这里竟然用'/'来分隔,当初确实没有料到,JDOC的说明等于没有.
            target.setRetries(1);                      //设置重试次数
            target.setTimeout(5000);             //设置超时
            
            snmp.listen();                                 //监听
            
            String m_oid = "1.3.6.1.4.1.140.625.10.1.0";
            int w=0;
            while(true) {
                w++;
                //set pud type and set oid
                PDU request = new PDU();         //new request PDU包
                request.setType(PDU.GETNEXT); //设置PDU类型,
                //            request.add(new VariableBinding(new OID("1.3.6.1.2.1.1"))); //OID添加
                //            request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1"))); //OID添加
                request.add(new VariableBinding(new OID(m_oid)));
//                System.out.println("request UDP:" + request);//请求包内内容输出,
                PDU response = null;//定义response包
                ResponseEvent responseEvent = snmp.send(request, target); //发出request PDU
                //接收response PDU
                response = responseEvent.getResponse();

                //response PDU包解析
                if (response != null) {
                    if (response.getErrorIndex() == response.noError
                            && response.getErrorStatus() == response.noError) {
//                        System.out.println("no error.");
                        String pause = responseEvent.getResponse()
                                .getVariableBindings().toString();
                        String getvalue = pause.substring(
                                pause.indexOf("= ") + 2, pause.indexOf(']'));
                        String oid = pause.substring(pause.indexOf("VBS[") + 2,
                                pause.indexOf("=") - 1);
                        System.out.println(oid);
//                        System.out.println(response);
                        m_oid = oid;

                    } else {
                        System.out.println("get error:"
                                + response.getErrorStatusText());
                        break;
DSC0006.gif                     }

                } else {
                    System.out.println("get response error");
                    break;
                }
               
                if (m_oid.equals("1.3.6.1.4.1.140.625.10.1.0")) {
                    break;
                }
            }
            System.out.println(":::::::" + w);
            
        } catch (IOException e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
DSC0007.gif }

要特别注意ip、端口、版本号、community和配置的一致  
  
  ....

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110949-1-1.html 上篇帖子: nagios,weblogic,8080,oracle,1521 下篇帖子: weblogic配置虚拟文件目录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表