zabbix 组件监控概述

目录

zabbix 组件监控概述

为了监控很多中间件,以 zabbix-agent 的 cenos-4.0.7 的官方镜像为基础,叠加做一系列修改,用于监控 docker 版的中间件:redis 4.0.9 、Zookeeper 3.4.6、Solr 8.4.1、openresy 1.15.8.1、Mongodb 3.2.22,ActiveMQ 5.10.2、Memcached 1.5.15、tomcat 8.5.51(支持同时监控多个 docker 容器实例)和非 docker 版的中间件:mysql5.6 、oracle11gR2 。

安装 docker-ce

从本地或者其它虚拟机拷贝廖磊制作的 docker-18.09.6 这个安装文件夹到目标机器 root 下(不建议采用原始的 yum 方式安装 docker , 容易在各种不同环境下产生不同的结果),然后运行安装脚本即可。

cd docker-18.09.6
./setup.sh --install

原基础镜像

我们把官方镜像 docker pull zabbix/zabbix-agent:centos-4.0.7 拉到公司的 harbor 仓库,同时取了一个新的 LABEL ,名称为 develop-harbor.geostar.com.cn/3rd/zabbix/zabbix-agent:centos-4.0-latest ,后续我们就是以这个镜像为基础来制作自己的 zabbix-agent 镜像。

新镜像

  • 编译镜像:

    本人使用 openstack 上的 172.16.101.19 这台机器作为制作镜像的机器(请各位不要使用这台机器

    把整个 data 文件夹下的内容载并拷贝到用来制作新镜像的机器的 /data 目录下(如果不存在目录请自行新建),作为我们制作镜像的目录

      cd /data/zabbix-agent/
      ./build.sh
    

    这个shell脚本会停止、删除主机上的所有运行的 docker 容器,然后编译我们自己的 develop-harbor.geostar.com.cn/3rd/zabbix/zabbix-agent:4.0.7-modify 镜像,请慎重使用这个脚本。

  • 上传镜像

    编译通过的镜像经过测试后可以上传到我们的 harbor 镜像仓库存储起来,用于提供给别人使用。

    docker login develop-harbor.geostar.com.cn  # 登录 harbor ,需要输入用户名/密码
    docker push develop-harbor.geostar.com.cn/3rd/zabbix/zabbix-agent:4.0.7-modify  # 推送镜像
    docker logout develop-harbor.geostar.com.cn  # 登出 harbor
    
  • 启动容器镜像:

    docker run --name zabbix-agent -v /usr/bin/docker:/usr/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock  --restart always -e ZBX_HOSTNAME="172.16.101.19_test123" -e ZBX_SERVER_HOST="172.16.102.253" -e ZBX_AGENT_HOST="1.2.3.4" -e SOLR_PORT="2222" -e ORACLE_PORT="1234" -e ORACLE_INSTANCE_NAME="myinstance" -p 10050:10050 -d develop-harbor.geostar.com.cn/3rd/zabbix/zabbix-agent:4.0.7-modify
    

    参数说明:ZBX_HOSTNAME 是 zabbix-server 界面添加的主机名,必须保持严格一致, ZBX_SERVER_HOST 是 zabbix-server 服务器ip,ZBX_AGENT_HOST 是 agent 所在宿主 ip ,SOLR_PORT 是 solr 的应用端口(如果用默认的端口 8983 则不用传),ORACLE_PORT 是 oralce 实例端口(如果用默认的端口 1521 则不用传),ORACLE_INSTANCE_NAME 是 oralce 实例名称。

    ps:如果是用 yum 安装的 docker-ce ,那么需要添加 -v /usr/lib64/libltdl.so.7:/usr/lib64/libltdl.so.7 的启动参数。下面的具体组件监控都需要运行 zabbix-agent 容器来监控

zookeeper 服务安装

拉取镜像

docker pull zookeeper:3.4

运行 zookeeper

docker run --name zookeeper --restart always -p 2181:2181 -p 2888:2888 -p 3888:3888  -d zookeeper:3.4

注意:zookeeper 内嵌 jetty 容器,会占用 8080 端口,所以这里不做端口映射,如果需要在同一台机器上监控 tomcat ,且使用 8080 ,注意两者避免端口冲突。

zookeeper 监控

启动我们自制的 zabbix-agent 容器,在 zabbix 主机管理页面关联Template App Zookeeper 模版,修改宏 {$ZOO_IP} 为当前 zookeeper 服务器 ip ,zookeeper 端口号默认为2181,如果当前服务端口已做修改,也需要修改宏 {$ZOO_PORT} 为 zookeeper 服务的端口号

OpenResty 服务安装

拉取镜像

docker pull openresty/openresty:1.15.8.1-4-alpine-fat-nosse42

运行镜像

docker run --name openresty --restart always -p 80:80 -v /root/nginx:/etc/nginx/conf.d -d openresty/openresty:1.15.8.1-4-alpine-fat-nosse42

进入容器

docker exec -it openresty bash

编辑 nginx 配置

vi /etc/nginx/conf.d/default.conf

注:配置文件加入stub_status配置并暴露/basic_status endpoint

location = /basic_status {
	    stub_status on;
	    access_log off;
	}

配置如下图:

浏览器测试能否取得监控数据: http://ip:port/basic_status

有如上数据返回则配置已经生效

OpenResty 监控

zabbix 主机管理页面关联 Template App Nginx 模版即可获得监控数据

mongodb 服务安装

拉取 mongodb 镜像

docker pull mongo:3.2

运行 mongodb

docker run --name mongo --restart always -p 27017:27017 -d mongo:3.2

mongodb 监控

zabbix 主机管理页面关联 Template MongoDB 模版即可获得监控数据。

redis 服务安装

redis 拉取

docker pull redis:4.0.9

redis 运行

docker run -d --privileged=true -p 6379:6379 -v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis:4.0.9 redis-server /usr/local/etc/redis/redis.conf

注:redis 配置文件预先放入 /root/redis/conf/ 目录下,不然无法正常挂载。

redis 监控

zabbix 主机管理页面关联 Template App Redis 模版即可获得监控数据。

solr 服务安装

solr 镜像拉取

docker pull solr:8.4.1

solr 容器启动

docker run --name solr_demo -d -p 8983:8983 -p 10053:10053 --privileged=true -e ENABLE_REMOTE_JMX_OPTS=true -e RMI_PORT=10053 -e SOLR_OPTS="-Djava.rmi.server.hostname=${solr_server_ip}" solr:8.4.1 solr-demo

${solr_server_ip} 是 solr 主机的 ip,请按照实际替换。这样会从 8983 端口启动 solr,并启动一个 demo 为名字的 core。

solr 监控

注意:solr 的监控使用的是 jmx 的远程连接监控,所以 solr 容器启动的时候需要开启对应的环境变量才能监控到数据!

zabbix 主机管理页面关联 Template App Solr 模版即可获得监控数据。添加主机的时候记住需要添加 jmx 接口,ip 为监控目标主机的ip,端口为 10053 。

这样就能看到普通监控项和发现类型的监控项(根据 solr 的 core 来分类展示)

Mysql5.6 服务安装

卸载 mariadb

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

下载 mysql 的 repo 源

yum install -y wget
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

通过 rpm 安装

rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装 mysql 并授权

yum install -y mysql-server
chown -R mysql:mysql /var/lib/mysql

启动 mysql

service mysqld start

mysql 客户端用 root 用户连接登录 mysql:

mysql -uroot

重置 mysql 密码

use mysql;
update user set password=password('root') where user='root';
flush privileges;

mysql 监控

给 zabbix 用户授权所有 ip 可以访问的权限:

mysql -uroot -proot
GRANT ALL ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
SELECT User, Host, Password FROM mysql.user;    //这一句检测是否授权成功
quit;

zabbix 主机管理页面关联 Template App MySQL 模版即可获得监控数据。

oracle 服务安装

详见丁浩提供的 Oracle_DB_R2 安装手册.pdf

oracle 安装包:
http://172.16.20.10/Oracle/DateBase/11g_R2/11.2.0.4.0/oracleDB-p13390677-112040-linux-x86_64.tar.xz

rsp 文件为:
http://172.16.20.10/Oracle/DateBase/db_install_112040.rsp

已测试在 centos7.6 环境下正常安装对应 openstack 镜像为
centos7.6.1810_base-kvm-50g-none

oracle 监控

查看机器是否能正常启动oracle监听,lsnrctl status 查看oracle监听启动状态

上图中oracle监听就没有正常启动,可以按下面两步修改配置来启动监听,vi /etc/hosts 修改/etc/hosts文件,把 <![HOSTIP]> 修改为这台 oracle 机器的 ip

登录oracle库:

su - oracle             # 切换到oracle用户

进入 oracle_home

cd /home/oracle/database/db_home/bin

启动监听

./lsnrctl start

sqlplus /nolog       # 不连接任何数据库
conn /as sysdba     # 用sysdba登陆
startup 启动实例

select instance_name from v$instance;   #查看实例

创建用户,在当前SQL>下执行以下语句:

SQL>CREATE USER ZABBIX IDENTIFIED BY ZABBIX DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;

SQL>GRANT ALTER SESSION TO zabbix;
 	GRANT CREATE SESSION TO zabbix;
 	GRANT CONNECT TO zabbix;
	ALTER USER zabbix DEFAULT ROLE ALL;
	GRANT SELECT ON V_$INSTANCE TO zabbix;
	GRANT SELECT ON DBA_USERS TO zabbix;
	GRANT SELECT ON V_$LOG_HISTORY TO zabbix;
	GRANT SELECT ON V_$LOG TO zabbix;
	GRANT SELECT ON V_$PARAMETER TO zabbix;
	GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO zabbix;
	GRANT SELECT ON V_$LOCK TO zabbix;
	GRANT SELECT ON DBA_REGISTRY TO zabbix;
	GRANT SELECT ON V_$LIBRARYCACHE TO zabbix;
	GRANT SELECT ON V_$SYSSTAT TO zabbix;
	GRANT SELECT ON V_$PARAMETER TO zabbix;
	GRANT SELECT ON V_$LATCH TO zabbix;
	GRANT SELECT ON V_$PGASTAT TO zabbix;
	GRANT SELECT ON V_$SGASTAT TO zabbix;
	GRANT SELECT ON V_$LIBRARYCACHE TO zabbix;
	GRANT SELECT ON V_$PROCESS TO zabbix;
	GRANT SELECT ON DBA_DATA_FILES TO zabbix;
	GRANT SELECT ON DBA_TEMP_FILES TO zabbix;
	GRANT SELECT ON DBA_FREE_SPACE TO zabbix;
	GRANT SELECT ON V_$SYSTEM_EVENT TO zabbix;
	GRANT SELECT ON V_$locked_object TO zabbix;
	GRANT SELECT ON dba_objects TO zabbix;
	GRANT SELECT ON dba_tablespaces TO zabbix;
	GRANT SELECT ON V_$SESSION TO zabbix;

注意:如果是 oracle11g 的数据库版本,还需要执行下面的语句开放 ACL 的访问控制,否则在监控的过程中有部份内容无法正常显示(例于数据库版本,数据库文件大小等),而且 orabbix 的日志显示中也会有错误提示。

SQL> exec dbms_network_acl_admin.create_acl(acl=> 'resolve.xml',description=> 'resolveacl',principal =>'ZABBIX', is_grant => true, privilege =>'resolve');
SQL> exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
SQL> commit;
SQL>exit;

注意:如果是之前 zabbix2.4 升级到 4.0,需要使用新的 orabbix 包,下载地址为:http://172.16.20.10/Zabbix/orabbix/orabbix-20200103.tar.gz
如果启动报 acl 错误:

需要删除原来的 acl 重新 create 一次:

SQL> exec dbms_network_acl_admin.drop_acl ( acl => 'resolve.xml');
SQL> exec dbms_network_acl_admin.create_acl(acl=> 'resolve.xml',description=> 'resolveacl',principal =>'ZABBIX', is_grant => true, privilege =>'resolve');
SQL> exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
SQL> commit;
SQL>exit;

zabbix 主机管理页面关联 Template_Oracle 模版并设置主机名称为 myinstance(与ORACLE_INSTANCE_NAME 这个 zabbix-agent 启动用到的环境变量设置一致)即可获得监控数据。

tomcat 服务安装

拉取 tomcat 镜像

docker pull develop-harbor.geostar.com.cn/base/apache-tomcat:8.5.51-8u231

启动 tomcat 多实例

docker run  -p 8088:8080 -p 10057:10057 --name tomcat-test1 -l JMX_MONITOR_UUID=bc47dcd484724fb48fe81bc9f0e3d802 -l JMX_PORT=10057 -d develop-harbor.geostar.com.cn/base/apache-tomcat:8.5.51-8u231
docker run  -p 8089:8080 -p 10058:10058 --name tomcat-test2 -l JMX_MONITOR_UUID=bc47dcd484724fb48fe81bc9f0e3d803 -l JMX_PORT=10058 -d develop-harbor.geostar.com.cn/base/apache-tomcat:8.5.51-8u231

注意:这里启动了 2 个 tomcat 容器实例,第一个容器内部 8080 映射到外部为 8088,jmx使用 10057 端口,第一个容器内部 8080 映射到外部为8089,jmx 使用 10058 端口。

进入每个tomcat容器实例内部(以tomcat-test1为例子)

docker exec -it tomcat-test1 bash

配置 jmx 监听

vi /srv/tomcat8/bin/catalina.sh

加入以下配置

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10057 -Dcom.sun.management.jmxremote.rmi.port=10057 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.101.245"

其中-Djava.rmi.server.hostname=配置为当前服务器 ip,请自行修改,
-Dcom.sun.management.jmxremote.port=10057
-Dcom.sun.management.jmxremote.rmi.port=10057
这两个 jmx 的端口需要与容器启动时候用的 jmx 端口保持一致。

退出 tomcat 容器,重启 tomcat 容器

exit
docker restart tomcat-test1

测试 jmx 能否获取到数据,打开 jdk 目录下面的 jconsole 工具,输入 jmx 远程连接 ip 和 jmx 连接端口

点连接后正常连接就证明 jmx 已正常启用

tomcat 监控

zabbix 主机管理页面关联 Templates App Tomcat 模版即可获得多个 tomcat 的 docker 实例的监控数据

监控到的数据

activemq 服务安装

拉取镜像

docker pull develop-harbor.geostar.com.cn/geosmarter/rmohr/activemq:5.10.2

运行 activemq 镜像

docker run --name activemq --restart always -p 61616:61616 -p 8161:8161 -p 10054:10054 -e ACTIVEMQ_RMI_SERVER_HOSTNAME=${activemq_ip} -d develop-harbor.geostar.com.cn/geosmarter/rmohr/activemq:5.10.2

注:对外暴露的 10054 端口为 jmx 端口, ${activemq_ip}为当前 activemq 服务器 ip

进入 activemq 容器内部修改配置,注意这里要用 root 用户登录进来

docker exec -itu root activemq bash

activemq 容器内安装 vim 编辑器

apt-get update
apt-get install -y vim

进入 activemq 的 bin 目录

cd /opt/apache-activemq-5.10.2/bin

修改 activemq 文件配置

vim activemq

找到 ACTIVEMQ_SUNJMX_START 配置,加入以下配置

ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=/opt/apache-activemq-5.10.2/conf/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=/opt/apache-activemq-5.10.2/conf/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Djava.rmi.server.hostname=$ACTIVEMQ_RMI_SERVER_HOSTNAME -Dcom.sun.management.jmxremote.port=10054 -Dcom.sun.management.jmxremote.rmi.port=10054 -Dcom.sun.management.jmxremote.ssl=false "

保存并退出编辑器,修改文件权限

chmod 400 /opt/apache-activemq-5.10.2/conf/jmx.access
chmod 400 /opt/apache-activemq-5.10.2/conf/jmx.password

注:如果要修改 jmx 的权限、账号、密码请修改 /opt/apache-activemq-5.10.2/conf/ 目录下的 jmx.access 和 jmx.password,具体可参考 https://activemq.apache.org/jmx ,这里我们直接采用的默认账号密码

退出 activemq 容器,重启 activemq 容器

exit
docker restart activemq

测试 jmx 能否获取到数据,打开 jdk 目录下面的 jconsole,输入 jmx 远程连接 ip 和端口,activemq 配置了 jmx 账号和密码,需要输入默认的账号密码 admin/activemq,jmx 的端口约定为 10054

点连接后正常连接就证明 jmx 已正常启用

activemq 监控

zabbix 主机管理页面关联 Template JMX ActiveMQ 模版并设置 JMX 端口为 10054 宏{$JMX_USERNAME} = admin,宏{$JMX_PASSWORD} = activemq即可获得监控数据

memcached 服务安装

拉取 memcached

docker pull develop-harbor.geostar.com.cn/geosmarter/memcached:1.5.15

运行 memcached

docker run --name memcached --restart always -p 11211:11211 -d develop-harbor.geostar.com.cn/geosmarter/memcached:1.5.15

memcached 监控

在 zabbix 主机管理页面关联 Template App memcached 模版,并且设置宏 {$MEMCACHED_SERVER} =当前 memcached ip 地址,宏 {$MEMCACHED_PORT} = 11211,即可获得监控数据

原文地址:https://www.cnblogs.com/huangmengke/p/12827332.html