• 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,即可获得监控数据

  • 相关阅读:
    NET Core入门笔记
    NET Core入门笔记
    NET Core入门笔记
    也许,这样理解HTTPS更容易
    也许,这样理解HTTPS更容易
    也许,这样理解HTTPS更容易
    10 个实战及面试常用 Shell 脚本编写
    10 个实战及面试常用 Shell 脚本编写
    10 个实战及面试常用 Shell 脚本编写
    7617:输出前k大的数
  • 原文地址:https://www.cnblogs.com/huangmengke/p/12827332.html
Copyright © 2020-2023  润新知