1、相關概念簡介:php
一、JMX:Java Management Extensions,Java管理擴展,是一個爲應用程序、設備、系統等植入管理功能的框架。JMX能夠跨越一系列異構操做系統平臺、系統體系結構和網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。前端
二、JVM:Java Virtual Machine,Java虛擬機,是一種用於計算設備的規範,是一個虛構出來的計算機,經過在實際的計算機上仿真模擬各類計算機功能來實現的。java
三、jconsole:Java Monitoring and Management Console,是一種基於JMX之上的JVM可視化監控、管理工具,主要監控JVM的概覽、內存、線程、類、VM概要和MBean等內容,以圖表化的形式顯示各類數據。mysql
2、準備工做:linux
一、演示環境:web
IPsql |
OS數據庫 |
部署軟件apache |
192.168.0.100vim |
Windows 10 |
jdk-8u241-windows-x64.exe |
192.168.0.120 |
CentOS 7.7 |
jdk-8u241-linux-x64.tar.gz apache-tomcat-8.5.51.tar.gz Zabbix Server、Zabbix Database Zabbix Web、Zabbix Java Gateway |
二、Zabbix版本選擇:https://www.zabbix.com/life_cycle_and_release_policy
備註:建議選擇LTS(Long Term Support,長期支持)版本
三、相關網址:
(1)Zabbix下載地址:https://www.zabbix.com/download/
(2)Zabbix 4.0 LTS中文產品手冊:https://www.zabbix.com/documentation/4.0/zh/manual
四、修改hosts配置文件:
# vim /etc/hosts,新增代碼:192.168.0.120 centos7
備註:centos7爲主機名
五、配置epel源:
# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm 或 # yum -y install epel-release
六、配置Zabbix的yum源:
# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
# rpm -ql zabbix-release
# cat /dev/null > /etc/yum.repos.d/zabbix.repo
# vim /etc/yum.repos.d/zabbix.repo
[aliyun-zabbix]
name=Aliyun Zabbix Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[aliyun-zabbix-non-supported]
name=Aliyun Zabbix Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
七、搭建LAMP環境:
說明:Zabbix Web依賴於LAMP環境,安裝zabbix-web-mysql(4.0.17)軟件包時默認會自動安裝httpd(2.4.6)、zabbix-web(4.0.17)等相關軟件包,此處使用yum方式安裝PHP 7.2版本。CentOS 7.7中MariaDB的版本爲5.5.64,版本較低,升級爲MariaDB 10.4版本後在導入create.sql文件時會提示「ERROR 1118 (42000) at line 1278: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.」,因此Zabbix Database使用MySQL 5.7。此處不單獨安裝httpd,並將Zabbix Database、Zabbix Server、Zabbix Web都部署在同一個節點上,實際生產環境中能夠分開部署。
(1)安裝配置MySQL 5.7:
a、查看系統中是否已經存在MariaDB:
# rpm -qa | grep -i mariadb --> mariadb-libs-5.5.64-1.el7.x86_64
# yum -y remove mariadb-libs
b、安裝mysql57-community-release-el7.rpm:
# rpm -ivh http://repo.mysql.com/mysql57-community-release-el7.rpm
備註:安裝後會在/etc/yum.repos.d目錄中生成mysql-community-source.repo和mysql-community.repo
c、安裝MySQL 5.7相關軟件包:
# yum list all | grep mysql-community
# yum -y install mysql-community-client mysql-community-common mysql-community-devel mysql-community-libs mysql-community-libs-compat mysql-community-server mysql-community-test
d、初始化MySQL 5.7:# mysqld --initialize --user=mysql --datadir=/var/lib/mysql
備註:初始化以前確保/var/lib/mysql目錄爲空
e、修改my.cnf配置文件:
# mv /etc/my.cnf /etc/my.cnf.bak
# vim /etc/my.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mysql-slow.log
symbolic-links=0
explicit_defaults_for_timestamp=1
server_id=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=row
f、啓動MySQL:
# systemctl start mysqld
# systemctl status mysqld
# ps aux | grep mysqld
# ss -tunlp | grep -w :3306
# tail -100 /var/log/mysqld.log
g、配置開機自啓:# systemctl enable mysqld
h、查看root@localhost用戶的初始密碼:# grep password /var/log/mysqld.log
i、配置安全向導:# mysql_secure_installation
j、登錄MySQL:# mysql -uroot -p
(2)安裝配置PHP 7.2:
a、安裝webtatic-release.rpm:# rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
b、安裝PHP 7.2相關軟件包:
# yum list all | grep php
# yum -y install mod_php72w php72w-cli php72w-common php72w-devel php72w-fpm php72w-gd php72w-ldap php72w-mbstring php72w-mysqlnd php72w-opcache php72w-xml
c、查看PHP版本:# php -version
3、部署Zabbix Server和Zabbix Web:
一、部署Zabbix Server:
(1)安裝zabbix-server-mysql軟件包:# yum -y install zabbix-server-mysql
(2)查看Zabbix Server版本:# zabbix_server -V
(3)建立數據庫和用戶:
# mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zbxuser'@'localhost' identified by '123456';
mysql> grant all on zabbix.* to 'zbxuser'@'localhost';
mysql> flush privileges;
(4)導入create.sql文件,初始化zabbix數據庫:
# zcat /usr/share/doc/zabbix-server-mysql-4.0.17/create.sql.gz | mysql -uzbxuser -p zabbix
(5)檢查zabbix數據庫中是否建立了表:
# mysql -uzbxuser -p -e 'use zabbix; show tables;' 2> /dev/null | wc -l
(6)修改zabbix_server.conf配置文件:
# rpm -ql zabbix-server-mysql
# cd /etc/zabbix
# cp zabbix_server.conf{,.bak}
# vim zabbix_server.conf
修改前 |
修改後 |
# ListenPort=10051 |
ListenPort=10051 |
# LogType=file |
LogType=file |
LogFile=/var/log/zabbix/zabbix_server.log |
保持默認 |
LogFileSize=0 |
保持默認 |
PidFile=/var/run/zabbix/zabbix_server.pid |
保持默認 |
# DBHost=localhost |
DBHost=localhost |
DBName=zabbix |
保持默認 |
DBUser=zabbix |
DBUser=zbxuser |
# DBPassword= |
DBPassword=123456 |
# DBSocket= |
DBSocket=/var/lib/mysql/mysql.sock |
# DBPort= |
DBPort=3306 |
# ListenIP=127.0.0.1 |
ListenIP=127.0.0.1 |
AlertScriptsPath=/usr/lib/zabbix/alertscripts |
保持默認 |
ExternalScripts=/usr/lib/zabbix/externalscripts |
保持默認 |
# FpingLocation=/usr/sbin/fping |
FpingLocation=/usr/sbin/fping |
# AllowRoot=0 |
AllowRoot=0 |
# User=zabbix |
User=zabbix |
(7)啓動Zabbix Server:
# systemctl start zabbix-server
# systemctl status zabbix-server
# ps aux | grep zabbix_server
# ss -tunlp | grep -w 10051
# tail -100 /var/log/zabbix/zabbix_server.log
(8)配置開機自啓:# systemctl enable zabbix-server
二、部署Zabbix Web:
(1)安裝zabbix-web-mysql軟件包:# yum -y install zabbix-web-mysql
(2)修改httpd.conf配置文件:
# vim /etc/httpd/conf/httpd.conf
修改前 |
修改後 |
#ServerName www.example.com:80 |
ServerName 192.168.0.120:80 |
(3)啓動httpd:
# systemctl start httpd
# systemctl status httpd
# ps aux | grep httpd
# ss -tunlp | grep -w :80
(4)配置開機自啓:# systemctl enable httpd
(5)配置CentOS 7.7 Firewall防火牆:
a、查看防火牆狀態:# systemctl status firewalld # firewall-cmd --state
b、查看防火牆規則:# firewall-cmd --list-all
c、查看防火牆開放端口:# firewall-cmd --list-ports
d、查看80端口是否開放:# firewall-cmd --query-port=80/tcp
e、開放80端口:# firewall-cmd --permanent --add-port=80/tcp
f、重載防火牆規則:# firewall-cmd --reload
備註:
Ø 關閉防火牆:# systemctl stop firewalld
Ø 關閉80端口:# firewall-cmd --permanent --remove-port=80/tcp
(6)瀏覽器訪問http://192.168.0.120/zabbix
說明:/etc/httpd/conf.d/zabbix.conf配置文件中已針對PHP 5.4優化,但目前安裝的是PHP 7.2,須要修改/etc/php.ini配置文件,Zabbix相關PHP網頁全存放在/usr/share/zabbix目錄下
# vim /etc/php.ini
修改前 |
修改後 |
post_max_size = 8M |
post_max_size = 16M |
max_execution_time = 30 |
max_execution_time = 300 |
max_input_time = 60 |
max_input_time = 300 |
;date.timezone = |
date.timezone = Asia/Shanghai |
重啓httpd:# systemctl restart httpd
刷新網頁,必須全部的檢查項都爲「OK」才能繼續:
安裝後生成的配置文件:/etc/zabbix/web/zabbix.conf.php
登陸Zabbix Web,用戶名Admin,密碼zabbix:
三、Zabbix Web簡單配置:
(1)修改Admin用戶默認密碼:
Administration --> Users --> Admin --> Change password --> 輸入2次新密碼root@1234 --> Update
新密碼:root@1234
退出從新登陸
(2)禁用Guests用戶組:
Administration --> User groups --> 勾選Guests組 --> Disable
(3)修改刷新不支持項的時間間隔:
Administration --> General --> Other --> Refresh unsupported items默認10m修改成30s --> Update
(4)調整每頁顯示的行數,默認爲50行:
右上角Admin--> User --> Rows per page --> Update
(5)開啓前端消息聲音:
右上角Admin--> Messaging --> Frontend messaging --> Update
4、部署Tomcat:
一、安裝JDK:
# tar -xf jdk-8u241-linux-x64.tar.gz -C /usr/local
# cd /usr/local
# ln -sv jdk1.8.0_241/ jdk
二、配置JDK環境變量:
# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# . /etc/profile.d/jdk.sh
# echo $JAVA_HOME
# java -version
三、解壓Tomcat:
# tar -xf apache-tomcat-8.5.51.tar.gz -C /usr/local
# cd /usr/local
# ln -sv apache-tomcat-8.5.51/ tomcat
四、配置Tomcat環境變量:
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
# . /etc/profile.d/tomcat.sh
# echo $CATALINA_HOME
# catalina.sh version
五、啓動Tomcat:
# useradd tomcat
# chown -R tomcat.tomcat /usr/local/apache-tomcat-8.5.51
# su - tomcat -c "startup.sh"
# ss -tunlp | grep 8080
# ps -ef | grep tomcat
六、配置CentOS 7.7 Firewall防火牆:
(1)查看8080端口是否開放:# firewall-cmd --query-port=8080/tcp
(2)開放8080端口:# firewall-cmd --permanent --add-port=8080/tcp
(3)重載防火牆規則:# firewall-cmd --reload
(4)查看防火牆開放端口:# firewall-cmd --list-ports
七、瀏覽器訪問http://192.168.0.120:8080
5、經過JMX監控JVM:
一、修改catalina.sh腳本文件:
# vim /usr/local/tomcat/bin/catalina.sh,在首行#!/bin/sh下方新增以下代碼:
CATALINA_OPTS="$CATALINA_OPTS -server -Xms2048m -Xmx2048m \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=192.168.0.120 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.rmi.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat/conf/jmxremote.access"
說明:
(1)-Dcom.sun.management.jmxremote:啓用遠程監控JVM
(2)-Djava.rmi.server.hostname=192.168.0.120:Tomcat的內網IP,而非Zabbix Server的IP,若是須要外網訪問,此處應該填寫Tomcat的公網IP或域名
(3)-Dcom.sun.management.jmxremote.port=12345:JMX默認對外端口號,是Zabbix Server監控時填寫的端口號,也是jconsole使用時的端口號
(4)-Dcom.sun.management.jmxremote.rmi.port=12345:RMI端口號,配置成和JMX相同的端口號,這樣只須要在防火牆中開放JMX一個端口號便可,不然每次重啓Tomcat,都會隨機分配RMI端口號,對於配置防火牆很是不便
(5)-Dcom.sun.management.jmxremote.ssl=false:不使用SSL認證
(6)-Dcom.sun.management.jmxremote.authenticate=true:使用用戶名密碼認證
(7)-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/conf/jmxremote.password:用於遠程監控JVM的密碼文件
(8)-Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat/conf/jmxremote.access:用於遠程監控JVM的默認訪問控制文件
(9)CATALINA_OPTS和JAVA_OPTS的區別:
a、CATALINA_OPTS:只被Tomcat使用
b、JAVA_OPTS:被全部Java應用程序使用
二、準備jmxremote.password和jmxremote.access配置文件:
# cd /usr/local/jdk/jre/lib/management
# cp -a jmxremote.access /usr/local/tomcat/conf
# cp -a jmxremote.password.template /usr/local/tomcat/conf/jmxremote.password
# chown -R tomcat.tomcat /usr/local/apache-tomcat-8.5.51
# cd /usr/local/tomcat/conf
# chmod 0600 jmxremote.access jmxremote.password
# vim jmxremote.access
修改前 |
修改後 |
controlRole readwrite \ |
root readwrite \ |
備註:
(1)readonly:只讀
(2)readwrite:可讀可寫
# vim jmxremote.password,在末尾# controlRole R&D下方新增代碼:root root@1234
三、重啓Tomcat:
# shutdown.sh
# configtest.sh
# chown -R tomcat.tomcat /usr/local/apache-tomcat-8.5.51
# su - tomcat -c "startup.sh"
# ss -tunlp | grep -w :12345
四、配置CentOS 7.7 Firewall防火牆:
(1)查看12345端口是否開放:# firewall-cmd --query-port=12345/tcp
(2)開放12345端口:# firewall-cmd --permanent --add-port=12345/tcp
(3)重載防火牆規則:# firewall-cmd --reload
(4)查看防火牆開放端口:# firewall-cmd --list-ports
五、Windows 10安裝JDK,並配置環境變量
六、Windows 10打開jconsole,鏈接遠程JVM:
6、安裝配置Zabbix Java Gateway和Zabbix Server:
一、安裝Zabbix Java Gateway:# yum -y install zabbix-java-gateway
二、修改zabbix_java_gateway.conf配置文件:
# cd /etc/zabbix
# cp zabbix_java_gateway.conf{,.bak}
# vim zabbix_java_gateway.conf
修改前 |
修改後 |
# LISTEN_IP="0.0.0.0" |
LISTEN_IP="127.0.0.1" |
# LISTEN_PORT=10052 |
LISTEN_PORT=10052 |
# START_POLLERS=5 |
START_POLLERS=5 |
# TIMEOUT=3 |
TIMEOUT=10 |
三、啓動Zabbix Java Gateway,並配置開機自啓:
# systemctl start zabbix-java-gateway
# systemctl status zabbix-java-gateway
# ss -tunlp | grep -w :10052
# systemctl enable zabbix-java-gateway
四、修改zabbix_server.conf配置文件,並重啓Zabbix Server:
# vim /etc/zabbix/zabbix_server.conf
修改前 |
修改後 |
# JavaGateway= |
JavaGateway=127.0.0.1 |
# JavaGatewayPort=10052 |
JavaGatewayPort=10052 |
# StartJavaPollers=0 |
StartJavaPollers=5 |
# systemctl restart zabbix-server
備註:StartJavaPollers的值要小於等於START_POLLERS的值
7、配置Zabbix Web,自定義監控JVM參數:
一、Zabbix Web添加JMX監控接口:
Configuration --> Hosts --> Zabbix server --> 新增JMX監控接口 --> Update
說明:IP爲Zabbix Java Gateway所部署服務器的IP,端口爲Tomcat中配置的JMX遠程端口
二、自定義監控項:
Items --> Create item --> Add
(1)Key:jmx["Catalina:type=Connector,port=8080",maxThreads]
備註:
a、只有添加了監控模板或監控項,JMX監控狀態纔會變綠
b、Key的格式:jmx["object_name",attribute_name]
object_name:Catalina:type=Connector,port=8080
attribute_name:maxThreads
(2)Key:jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",maxConnections]
object_name:Catalina:type=ThreadPool,name="http-nio-8080"
attribute_name:maxConnections
(3)Key:jmx["java.lang:type=MemoryPool,name=PS Eden Space",Type]
object_name:java.lang:type=MemoryPool,name=PS Eden Space
attribute_name:Type
三、查看最新監控數據:
Monitoring --> Latest data --> Apply