zabbix 监控 tomcat

一,  脚本监控文件

    

  1 #!/bin/bash
  2 # @Function
  3 # Find out the highest cpu consumed threads of java, and print the stack of these threads.
  4 #
  5 # @Usage
  6 #   $ ./show-busy-java-threads.sh
  7 #
  8 # @author Jerry Lee
  9 
 10 readonly PROG=`basename $0`
 11 readonly -a COMMAND_LINE=("$0" "$@")
 12 
 13 usage() {
 14     cat <<EOF
 15 Usage: ${PROG} [OPTION]...
 16 Find out the highest cpu consumed threads of java, and print the stack of these threads.
 17 Example: ${PROG} -c 10
 18 
 19 Options:
 20     -p, --pid       find out the highest cpu consumed threads from the specifed java process,
 21                     default from all java process.
 22     -c, --count     set the thread count to show, default is 5
 23     -h, --help      display this help and exit
 24 EOF
 25     exit $1
 26 }
 27 
 28 readonly ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "$@"`
 29 [ $? -ne 0 ] && usage 1
 30 eval set -- "${ARGS}"
 31 
 32 while true; do
 33     case "$1" in
 34     -c|--count)
 35         count="$2"
 36         shift 2
 37         ;;
 38     -p|--pid)
 39         pid="$2"
 40         shift 2
 41         ;;
 42     -h|--help)
 43         usage
 44         ;;
 45     --)
 46         shift
 47         break
 48         ;;
 49     esac
 50 done
 51 count=${count:-5}
 52 
 53 redEcho() {
 54     [ -c /dev/stdout ] && {
 55         # if stdout is console, turn on color output.
 56         echo -ne "\033[1;31m"
 57         echo -n "$@"
 58         echo -e "\033[0m"
 59     } || echo "$@"
 60 }
 61 
 62 yellowEcho() {
 63     [ -c /dev/stdout ] && {
 64         # if stdout is console, turn on color output.
 65         echo -ne "\033[1;33m"
 66         echo -n "$@"
 67         echo -e "\033[0m"
 68     } || echo "$@"
 69 }
 70 
 71 blueEcho() {
 72     [ -c /dev/stdout ] && {
 73         # if stdout is console, turn on color output.
 74         echo -ne "\033[1;36m"
 75         echo -n "$@"
 76         echo -e "\033[0m"
 77     } || echo "$@"
 78 }
 79 
 80 # Check the existence of jstack command!
 81 if ! which jstack &> /dev/null; then
 82     [ -z "$JAVA_HOME" ] && {
 83         redEcho "Error: jstack not found on PATH!"
 84         exit 1
 85     }
 86     ! [ -f "$JAVA_HOME/bin/jstack" ] && {
 87         redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack file does NOT exists!"
 88         exit 1
 89     }
 90     ! [ -x "$JAVA_HOME/bin/jstack" ] && {
 91         redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack is NOT executalbe!"
 92         exit 1
 93     }
 94     export PATH="$JAVA_HOME/bin:$PATH"
 95 fi
 96 
 97 readonly uuid=`date +%s`_${RANDOM}_$$
 98 
 99 cleanupWhenExit() {
100     rm /tmp/${uuid}_* &> /dev/null
101 }
102 trap "cleanupWhenExit" EXIT
103 
104 printStackOfThread() {
105     local line
106     local count=1
107     while IFS=" " read -a line ; do
108         local pid=${line[0]}
109         local threadId=${line[1]}
110         local threadId0x=`printf %x ${threadId}`
111         local user=${line[2]}
112         local pcpu=${line[4]}
113 
114         local jstackFile=/tmp/${uuid}_${pid}
115 
116         [ ! -f "${jstackFile}" ] && {
117             {
118                 if [ "${user}" == "${USER}" ]; then
119                     jstack ${pid} > ${jstackFile}
120                 else
121                     if [ $UID == 0 ]; then
122                         sudo -u ${user} jstack ${pid} > ${jstackFile}
123                     else
124                         redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})."
125                         redEcho "User of java process($user) is not current user($USER), need sudo to run again:"
126                         yellowEcho "    sudo ${COMMAND_LINE[@]}"
127                         echo
128                         continue
129                     fi
130                 fi
131             } || {
132                 redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})."
133                 echo
134                 rm ${jstackFile}
135                 continue
136             }
137         }
138         blueEcho "[$((count++))] Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user}):"
139         sed "/nid=0x${threadId0x} /,/^$/p" -n ${jstackFile}
140     done
141 }
142 
143 
144 ps -Leo pid,lwp,user,comm,pcpu --no-headers | {
145     [ -z "${pid}" ] &&
146     awk '$4=="java"{print $0}' ||
147     awk -v "pid=${pid}" '$1==pid,$4=="java"{print $0}'
148 } | sort -k5 -r -n | head --lines "${count}" | printStackOfThread
View Code

    在tomcat中执行脚本

    

    会这样显示

二,  zabbix服务端配置

      在清华源下载zabbix-java-getway

      rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-java-gateway-4.0.0-2.el7.x86_64.rpm

    

    再次安装依赖

    

    yum install -y zabbix-java-gateway-4.0.0-2.el7.x86_64

    

    启动服务

    systemctl enable zabbix-java-gateway.service

    systemctl start zabbix-java-gateway.service

    systemctl status zabbix-java-gateway.service

    

    

    重启服务器

    systemctl restart zabbix-java-gateway.service

三, 客户端配置

    安装zabbix -agent 

    rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

    yum install zabbix-agent -y

    

    配置被监控项

    vim  /application/tomcat/bin/catalina.sh +97

    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=10.0.0.11"

    重新启动

     systemctl start zabbix-agent.service

四,web界面添加

    添加主机

    

    完成后添加模板等待就行

      

      

posted on 2018-10-26 11:53  kingle-l  阅读(862)  评论(0编辑  收藏  举报

levels of contents