zabbix监控jvm原理和低级监控项

部署jdk

  🍆jdk地址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  🥑网盘地址:https://pan.baidu.com/s/1CN5Je6O9zPoIcDMDV91AFQ 提取码:zymi

 介绍:可能是最好用的开源 Java 博客程序(官网这么说的🙃)

官方地址https://www.zrlog.com/

1. 解压jdk到/user/local,创建软连接

mkdir /app/
tar xf jdk-8u221-linux-x64.tar.gz -C /app/
ln -s /app/jdk1.8.0_221/ /app/jdk

2. 全局环境变量

export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jarq

. /etc/profile

3测试版本

[root@ntp /app]# java -version 
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

安装tomcat

  🥝tomcat官网http://tomcat.apache.org/

1. 解压tomcat压缩包到/user/local

  🍋tomcat网盘地址:链接:https://pan.baidu.com/s/1_CQfRJZdFnrgZo48MSIcgw 提取码:9ear

tar xf apache-tomcat-8.5.50.tar.gz -C /app 
ln -s /app/apache-tomcat-8.5.50/ /app/tomcat
echo "export TOMCAT_HOME=/app/tomcat" >> /etc/profile 
. /etc/profile

2检查tomcat变量是否添加完成,执行命令

/app/tomcat/bin/version.sh     --查看版本
/app/tomcat/bin/startup.sh     --启动tomcat

#查看8080端口是否开启
[root@ntp /app]# netstat  -lntup  | grep java
tcp6       0      0 :::8009                 :::*                    LISTEN      25859/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      25859/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      25859/java   

导入zrlog.tar文件

1然后将webapps下的默认文件全部清除

cd /app/tomcat/webapps
rm -rf *
#将zrlog.tar 复制到webapps/目录下改名为ROOT.TAR
wget http://dl.zrlog.com/release/zrlog-2.1.7-768d7a6-release.war
cp zrlog-2.1.7-768d7a6-release.war  /app/tomcat/webapps/ROOT.war

部署数据库

1安装

yum install mariadb mariadb-server -y
systemctl start mariadb
systemctl enable mariadb 

2. 创建数据库

mysql
create database zrlog character set utf8 collate utf8_general_ci;
grant all on zrlog.* to 'zrlog'@'localhost' identified by '123456';

配置网站

登录http://10.0.0.88:8080/ 配置数据库

配置登录信息

最后结果

注:博皮下载地址https://store.zrlog.com/template/

zabbix监控jvm

客户端添加参数

  • tomcat 开启jmxremote
#开启tomcat的远程监控
vim /app/apache-tomcat-8.0.27/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.8 -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

注:之间有空格,否则12345端口不会出现

$ ./shutdown.sh
$ ./start.sh

window监控java

监控文件默认安装位置C:\Program Files\Java\jdk1.8.0_31\bin\jconsole.exe

zabbix监控java

原理图:

  •  在zabbix-server上安装java-gateway
yum install zabbix-java-gateway -y
systemctl start zabbix-java-gateway
systemctl enable zabbix-java-gateway

修改zabbix-server的配置文件(java-gatewayd的地址)

289 JavaGateway=10.0.0.71    --连接地址
297 JavaGatewayPort=10052    ---端口
305 StartJavaPollers=5       ---开启进程

web界面链接模板

链接模板

自定义jmx监控项

"Catalina:type=Manager,host=localhost,context=/"
maxActive

新建应用集:session

取值结果

zabbix低级自动发现

低级自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。

为什么要用低级自动发现

低级自动发现特别适合用于监控那些有规律又有差异的监控对象。例如A主机有3个挂载分区,B主机有4个挂载分区,c主机有5个挂载分区,每个分区挂载目录还不一样,现在要求,监控每一个分区的 磁盘总容量剩余容量使用容量block剩余百分比inode使用百分比,这时候使用普通的zabbix模板根本无法监控

监控磁盘

注:添加一块磁盘并进行格式化

$ mkfs.xfs /dev/sdb
$ mount /dev/sdb  /mnt/
$ df -h
/dev/sdb         20G   33M   20G   1% /mnt

图片点击:配置--> 主机 --> 监控项 --> 非模板监控项 查看

 注:这里带有感叹号的是已经添加上的磁盘监控项,卸载显示的

取出值新磁盘的百分比值

df -h | grep -w "/" | awk '{print $5}' | tr -d '%'

编辑监控项的配置文件

注:使用变量$1传参,后期加硬盘也可以显示

$ vim /etc/zabbix/zabbix_agent.d/disk.conf
UserParameter=disk_pused[*],df -h|grep -w '$1'|awk '{print $$5}' | tr -d '%'
​
$ systemctl restart zabbix-agent

zabbix-serve验证

$ zabbix_get  -s 172.16.1.8 -k disk_pused[/]
6

显示报错:zabbix测值显示zabbix_get [39169]: Check access restrictions in Zabbix agent configuration

检查Zabbix代理配置中的访问限制

报错处理:zabbix-agent 配置文件的139 ServerActive=127.0.0.1

添加监控项原型

克隆监控项原型

 添加的内容,一个更改三处

 结果

低级自动发现的过滤器

监控容器

监控每个容器的内存使用率,每个容器的cpu使用率

安装docker

链接https://pan.baidu.com/s/1BP3Z1xs5rM6sRnZPh2FfHg 提取码:djoq

1. 上传镜像

yum install docker -y
systemctl start docker 
systemctl enable docker
​
#上传镜像
docker load  -i docker_nginx.tar.gz
b67d19e65ef6: Loading layer [==================================================>]  72.5 MB/72.5 MB
6eaad811af02: Loading layer [==================================================>] 57.54 MB/57.54 MB
a89b8f05da3a: Loading layer [==================================================>] 3.584 kB/3.584

2. 启动镜像

#启动三个容器,用于监控
docker run -d nginx:latest
docker run -d nginx:latest
docker run -d nginx:latest
​
#查看容器启动情况
docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
1ad314ed01c9        nginx:latest        "nginx -g 'daemon ..."   11 seconds ago      Up 10 seconds       80/tcp              priceless_cray
c650853b0f57        nginx:latest        "nginx -g 'daemon ..."   12 seconds ago      Up 11 seconds       80/tcp              relaxed_lamport
949401c2cfac        nginx:latest        "nginx -g 'daemon ..."   14 seconds ago      Up 13 seconds       80/tcp              infallible_kare
​
​
#查看使用情况
docker stats --no-stream 
CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
1ad314ed01c9        0.00%               1.391 MiB / 972.6 MiB   0.14%               1.55 kB / 656 B     0 B / 0 B           2
c650853b0f57        0.00%               1.391 MiB / 972.6 MiB   0.14%               1.81 kB / 656 B     0 B / 0 B           2
949401c2cfac        0.00%               1.383 MiB / 972.6 MiB   0.14%               2.24 kB / 656 B     684 kB / 0 B

显示出容器监控项

在主机监控项Network interfaces查找

注:将更新时间改为30s

条件过滤器

注:将容器监控网络监控项过滤出来

 添加的监控项

 结果

自定义低级自动发现规则

创建自动发现脚本

mkdir  /server/scripts -p
vim discovery_container_port.sh
​
#!/bin/bash
port=($(/usr/bin/docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
printf '{\n'
printf '\t"data":[\n'
   for key in ${!port[@]}
       do
           if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
              printf '\t {\n'
              printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"
           else [[ "${key}" -eq "((${#port[@]}-1))" ]]
              printf '\t {\n'
              printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"
           fi
   done
              printf '\t ]\n'
              printf '}\n'

配置文件添加监控项

1. visudo

visudo
101 zabbix  ALL=(ALL)      NOPASSWD:ALL

2. 脚本文件加上sudo

vim /etc/zabbix/zabbix_agnet.d/disk.conf
UserParameter=disk_pused[*],df -h|grep -w '$1'|awk '{print $$5}' | tr -d '%'
UserParameter=discovery_container_port,sudo /bin/bash /server/scripts/discovery_container_port.sh

3. zabbix服务端测试

$ zabbix_get  -s 172.16.1.8 -k discovery_container_port 
{
    "data":[
     {
            "{#CONTAINERNAME}":"priceless_cray"},  --容器传入的参数
     {
            "{#CONTAINERNAME}":"relaxed_lamport"},
     {
            "{#CONTAINERNAME}":"infallible_kare"}
     ]
}

创建低级自动发现规则

创建发现规则

配置--> 主机--> 自动发现--> 创建发现规则

利用监控项取值容器使用率

修改脚本discovery_container_port.sh

#!/bin/bash
port=($(/usr/bin/docker ps -a|grep -v "CONTAINER ID"|awk '{print $1}'))

服务端取值

$ zabbix_get  -s 172.16.1.8 -k discovery_container_port 
{
    "data":[
     {
            "{#CONTAINERNAME}":"1ad314ed01c9"},
     {
            "{#CONTAINERNAME}":"c650853b0f57"},
     {
            "{#CONTAINERNAME}":"949401c2cfac"}
     ]
}

取值,容器内存使用率

$ docker stats  --no-stream | grep -w cfda8eb58988 | awk {'print $8'} | tr -d '%'
0.14

配置文件加入自定义监控项

vim /etc/zabbix/zabbix_agent.d/disk.conf
UserParameter=container_mem_pused[*],sudo docker stats  --no-stream | grep -w $1 | awk {'print $$8'} | tr -d '%'   --取值容器内存使用率
​
​
systemctl restart zabbix-agent

服务端添加新的自动发现规则

容器列表显示

 容器内存结果显示

posted @ 2020-02-07 22:58  kerwin-  阅读(640)  评论(0编辑  收藏  举报