zabbix

安装zabbix-server

准备数据库

1
2
3
4
5
MariaDB [wpdb]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [wpdb]> grant all privileges on zabbix.* to zabbix@'10.10.10.%' identified by 'centos';
Query OK, 0 rows affected (0.01 sec)

编译安装zabbix

到官方网站下载zabbix4.0.3版本的源码包
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.3/zabbix-4.0.3.tar.gz/download
安装依赖包

1
[root@10-10-10-11 zabbix-4.0.3]#yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel libevent-devel –y

如果是最小化安装的系统,还需安装以下常用包

1
[root@10-10-10-11 zabbix-4.0.3]#yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel -y

因为要支持java,所以要安装jdk

1
[root@node01 bin]# yum -y install java-11-openjdk-devel

开始编译安装

1
2
3
4
5
6
7
[root@10-10-10-11 zabbix-4.0.3]#pwd
/root/tools/zabbix-4.0.3
[root@10-10-10-11 tools]#tar xf zabbix-4.0.3.tar.gz
[root@10-10-10-11 tools]#cd zabbix-4.0.3
[root@10-10-10-11 zabbix-4.0.3]#useradd zabbix -s /sbin/nologin
[root@10-10-10-11 zabbix-4.0.3]#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
[root@10-10-10-11 zabbix-4.0.3]#make && make install

在编译过程中报错

checking size of void *... 8
checking for mysql_config... no
checking for mariadb_config... no
configure: error: MySQL library not found

解决方法为安装mysql-devel包

1
[root@10-10-10-11 zabbix-4.0.3]#yum -y install mysql-devel

安装完成后修改zabbix-server.conf配置文件,如下:

1
2
3
4
5
6
7
8
9
10
11
12
[root@10-10-10-11 zabbix]#grep "^[a-Z]" /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/usr/local/zabbix/logs/zabbix_server.log
DebugLevel=3
PidFile=/usr/local/zabbix/pid/zabbix_server.pid
SocketDir=/usr/local/zabbox/socket
DBHost=10.10.10.6
DBName=zabbix
DBUser=zabbix
DBPassword=centos
DBPort=3306
Timeout=4
LogSlowQueries=3000

创建相关目录

1
2
[root@10-10-10-11 mysql]#mkdir /usr/local/zabbix/{pid,logs,socket} -pv
[root@10-10-10-11 mysql]#chown -R zabbix.zabbix /usr/local/zabbix/

导入数据库

1
2
3
4
5
[root@10-10-10-11 mysql]#pwd
/root/tools/zabbix-4.0.3/database/mysql
[root@10-10-10-11 mysql]#mysql -uzabbix -pcentos -h10.10.10.23 zabbix < schema.sql
[root@10-10-10-11 mysql]#mysql -uzabbix -pcentos -h10.10.10.23 zabbix < images.sql
[root@10-10-10-11 mysql]#mysql -uzabbix -pcentos -h10.10.10.23 zabbix < data.sql

复制启动脚本

1
2
3
4
[root@10-10-10-11 zabbix-4.0.3]#pwd
/root/tools/zabbix-4.0.3
[root@10-10-10-11 zabbix-4.0.3]#cp misc/init.d/fedora/core/zabbix_server /etc/init.d/
[root@10-10-10-11 zabbix-4.0.3]#cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/

修改启动脚本

1
2
3
4
vim /etc/init.d/zabbix_server
vim /etc/init.d/zabbix_agent
21 # Zabbix-Directory
22 BASEDIR=/usr/local/zabbix

启动zabbix-server

1
~]#service zabbix_server start

配置web界面

1
2
3
[root@10-10-10-11 html]#yum -y install httpd
[root@10-10-10-11 html]#cp -a /root/tools/zabbix-4.0.3/frontends/php/* /var/www/html/
[root@10-10-10-11 html]#systemctl start httpd

此时,在浏览可以通过ip访问该站点了。

访问zabbix时会出现几个报错,解决办法为:
安装缺少的包

1
[root@10-10-10-11 html]#yum install php-gettext php-session php-ctype php-xmlreader php-xmlwriter php-xml php-net-socket php-gd php-mysql -y

修改php配置文件如下:

1
2
3
4
5
[root@10-10-10-11 html]#vi /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后再次访问web

之后按提示操作配置后就可以正常访问zabbix-server。

zabbix字体乱码的解决办法:
将Windows中的字体(控制面板->小图标->字体)拷贝到zabbix中

1
2
3
4
5
6
7
8
9
10
11
12
[root@10-10-10-11 fonts]#pwd
/var/www/html/fonts
[root@10-10-10-11 fonts]#ll
total 12252
-rw-r--r-- 1 zabbix zabbix 756072 Dec 20 19:24 DejaVuSans.ttf
-rw-r--r-- 1 zabbix zabbix 11787328 Dec 4 2017 simkai.ttf
[root@10-10-10-11 html]#pwd
/var/www/html
[root@10-10-10-11 html]#grep "DejaVuSans" ./* -R
Binary file ./fonts/DejaVuSans.ttf matches
./include/defines.inc.php:define('ZBX_GRAPH_FONT_NAME', DejaVuSans'); // font file name
./include/defines.inc.php:define('ZBX_FONT_NAME', 'DejaVuSans');

将搜索到的文件中的字体替换为刚才复制进来的字体即可。

向zabbix server中增加agent(被动模式)

先在客户端安装zabbix agent

1
2
[root@host-10-10-10-13 zabbix-4.0.3]# ./configure --enable-agent --prefix=/usr/local/zabbix 
[root@host-10-10-10-13 zabbix-4.0.3]#make && make install

修改zabbix agent的配置文件

1
2
3
4
5
6
7
8
9
10
[root@host-10-10-10-13 zabbix]# grep "^[a-Z]" /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/pid/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
DebugLevel=3
Server=10.10.10.11 ##被动模式下的服务器地址
StartAgents=3
ServerActive=127.0.0.1 ##主动模式下的服务器地址
Hostname=10.10.10.13 ##主机名,必须在整个zabbix监控组里面唯一,且与zabbix上的名称保持一致
Timeout=30
UnsafeUserParameters=1

创建相关目录和zabbix用户,

1
2
3
[root@host-10-10-10-13 zabbix]# mkdir /usr/local/zabbix/{logs,pid}
[root@host-10-10-10-13 zabbix]# useradd zabbix -s /sbin/nologin
[root@host-10-10-10-13 zabbix]# chown -R zabbix.zabbix /usr/local/zabbix/

启动zabbix agent之后,即可以在web图形界面添加相应的主机。

zabbix get工具介绍:使用该工具可以获取zabbix agent数据命令。可以通过yum安装zabbix-get的rpm包获取该工具。
编译安装的zabbix在安装目录下的bin目录里面也有该工具,可以通过如下方式使用

1
2
3
4
[root@10-10-10-11 zabbix-4.0.3]#cd /usr/local/zabbix/
[root@10-10-10-11 zabbix]#ls bin
zabbix_get zabbix_sender
[root@10-10-10-11 zabbix]#cp bin/zabbix_get /usr/bin/

使用zabbix监控tomcat

在zabbix server上安装配置java gateway

java gateway可以配置在一个单独的服务器上,也可以和zabbix server配置在同一服务器上,这里以单独配置一台java gateway服务器为例。编译安装的zabbix开启–enable-java选项会自动安装java gateway功能。

1
2
3
~]#yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb-devel java-1.8.0-openjdk-devel -y
~]#./configure --prefix=/usr/local/zabbix --enable-java --with-net-snmp --with-mysql --with-ssh2
~]#make && make install

编辑配置文件

1
2
3
4
5
6
~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=20 #启动多少个进程轮询java,要和java 应用保持一定关系
TIMEOUT=30

启动java gateway

1
~]#/usr/local/zabbix/sbin/zabbix_java/startup.sh

单独配置一台java gateway服务器

下载安装java gateway的rpm包

1
2
[root@docker tools]#wget https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-java-gateway-4.0.3-1.el7.x86_64.rpm
[root@docker tools]#yum install zabbix-java-gateway-4.0.3-1.el7.x86_64.rpm

编辑配置文件,此配置文件和编译安装的配置文件一样

1
2
3
4
[root@docker tools]#grep "^[a-Z]" /etc/zabbix/zabbix_java_gateway.conf 
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=10
TIMEOUT=30

启动java gateway

1
[root@docker tools]#systemctl start zabbix-java-gateway

配置zabbix server调用java gateway

1
2
3
4
5
~]#vim /usr/local/zabbix/etc/zabbix_server.conf
JavaGateway=192.168.15.203 #指定java gateway的地址
JavaGatewayPort=10052 #指定java gateway的服务器监听端口,如果是默认端口可以不写
StartJavaPollers=20 #启动多少个进程去轮训 java gateway,要和java gateway的配置一致
Timeout=30

配置tomcat启用jmx远程监控

配置tomcat的启动脚本

1
2
3
4
5
6
7
8
[root@docker tomcat]#vi /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #默认启动的JMX端口号,要和zabbix添加主机时候的端
口一致即可
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl认证
-Djava.rmi.server.hostname=192.168.34.102" #tomcat主机自己的IP地址,不要写zabbix服务器的地址

之后启动tomcat就可以在zabbix server上增加该主机的jmx监控。

监控java的排错方法

测试能否获取到java当前已经分配的线程数

1
# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.15.203:12345 'Catalina:name="http-bio8080",type=ThreadPool' currentThreadCount

zabbix proxy(被动模式)

zabbix 是一个分布式的监控系统,支持通过代理服务器zabbix proxy收集zabbix agent的数据,然后把收集保存在本地数据库并发送给zabbix server进行统一存储和展示。

安装zabbix proxy

安装依赖包

1
[root@zabbix-proxy ~]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -y

准备mysql数据库

1
2
MariaDB [(none)]>create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]>grant all privileges on zabbix_proxy.* to proxy@'%' identified by '123456';

编译安装zabbix

1
[root@host-10-10-10-12 zabbix-4.0.3]# ./configure --prefix=/usr/local/zabbix --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java

导入数据库,由于此zabbix仅作为proxy使用,所以只需导入schema.sql这一个库即可。

1
[root@host-10-10-10-12 tools]# mysql -uproxy -pcentos -h10.10.10.23 zabbix_proxy < /root/tools/zabbix-4.0.3/database/mysql/schema.sql

配置被动模式下的zabbix proxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@apache zabbix]#grep "^[a-Z]" etc/zabbix_proxy.conf
ProxyMode=1 #0为主动,1为被动
Server=192.168.15.201 #zabbix server服务器的地址或主机名
Hostname=proxy1-mage-passive #代理服务器名称,需要与zabbix server添加代理时候的proxy name是一致的!
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.15.203 #数据库服务器地址
DBName=zabbix_proxy #使用的数据库名称
DBUser=proxy #连接数据库的用户名称
DBPassword=123456 #数据库用户密码
DBPort=3306 #数据库端口
ProxyLocalBuffer=3 #已经提交到zabbix server的数据保留时间
ProxyOfflineBuffer=24 #未提交到zabbix server的时间保留时间
HeartbeatFrequency=60 #心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
ConfigFrequency=5 #间隔多久从zabbix server 获取监控信息
DataSenderFrequency=5 #数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
StartPollers=20 #启动的数据采集器数量
JavaGateway=192.168.15.202 #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到数据
JavaGatewayPort=10052 #Javagatewa服务端口
StartJavaPollers=20 #启动多少个线程采集数据
CacheSize=2G #保存监控项而占用的最大内存
HistoryCacheSize=2G #保存监控历史数据占用的最大内存
Timeout=30 #监控项超时时间,单位为秒
LogSlowQueries=3000 #毫秒,多久的数据库查询会被记录到日志

编译安装zabbix agent

1
2
3
4
5
6
7
8
9
10
11
[root@web-server zabbix-4.0.1]# grep "^[a-Z]" /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
DebugLevel=4
Server=192.168.15.202,192.168.15.201
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.15.202
Hostname=192.168.34.101
Timeout=30
UnsafeUserParameters=1

注意,如果agent是通过proxy将数据发到server上的,那么agent配置文件的server要同时写上server和proxy的地址,以逗号分隔。

zabbix主动模式

zabbix主被动模式是相对agent来说的,主动模式是agent自动采集数据后发送给server或者proxy,不需要zabbix server的干预,因此主动模式在一定程度上可减轻zabbix server的压力。
zabbix被动模式是server主动向客户端发送请求,客户端被动收集数据后发送给sever,由于zabbix server需要周期性的项agent索取数据,这种模式的最大问题就是会加大zabbix server的工作量,在数百台服务器的环境下zabbix server不能及时获取到最新的数据,被动模式时zabbix默认的工作模式。

zabbix是一个分布式的监控系统,支持通过代理服务器zabbix proxy收集zabbix agent的数据,然后收集保存在本地数据库并发送给zabbix server进行统一存储和展示。

配置主动模式的proxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@apache zabbix]#grep "^[a-Z]" etc/zabbix_proxy.conf
ProxyMode=0 #0为主动,1为被动
Server=192.168.34.100 #zabbix server服务器的地址或主机名
Hostname=proxy1-mage-passive #代理服务器名称,需要与zabbix server添加代理时候的proxy name是一致的!
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.15.203 #数据库服务器地址
DBName=zabbix_proxy #使用的数据库名称
DBUser=proxy #连接数据库的用户名称
DBPassword=123456 #数据库用户密码
DBPort=3306 #数据库端口
ProxyLocalBuffer=3 #已经提交到zabbix server的数据保留时间
ProxyOfflineBuffer=24 #未提交到zabbix server的时间保留时间
HeartbeatFrequency=60 #心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
ConfigFrequency=5 #间隔多久从zabbix server 获取监控信息
DataSenderFrequency=5 #数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
StartPollers=20 #启动的数据采集器数量
JavaGateway=192.168.15.202 #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到数据
JavaGatewayPort=10052 #Javagatewa服务端口
StartJavaPollers=20 #启动多少个线程采集数据
CacheSize=2G #保存监控项而占用的最大内存
HistoryCacheSize=2G #保存监控历史数据占用的最大内存
Timeout=30 #监控项超时时间,单位为秒
LogSlowQueries=3000 #毫秒,多久的数据库查询会被记录到日志

配置主动模式的agent

1
2
3
4
5
6
7
8
[root@localhost zabbix]# grep "^[a-Z]" etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/pid/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.34.100,192.168.34.103
ServerActive=192.168.34.100,192.168.34.103 #主动模式下的server地址
Hostname=192.168.34.103 #本机的名称,必须与添加主机时的主机名一样
Timeout=30
UnsafeUserParameters=1

编译安装的步骤:

  • configure,检查编译环境是否符合要求,如果符合要求生成Makefile
  • make,根据Makefile生成模块
  • make install,将生成的模块拷贝到指定的目录,完成安装。

监控TCP连接数

创建获取数据的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost zabbix]# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp_conn_plugin.sh 
#!/bin/bash
tcp_conn_status(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for (i in s) print i,s[i]}' > /tmp/tcp_conn.txt
TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
if [ -z ${TCP_STAT_VALUE} ];then
TCP_STAT_VALUE=0
fi
echo $TCP_STAT_VALUE
}
main(){
case $1 in
tcp_status)
tcp_conn_status $2
;;
*)
echo "$0 + tcp_status + STATUS"
esac
}
main $1 $2

创建conf文件引用脚本

1
2
[root@localhost zabbix]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/all.conf
UserParameter=linux_status[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp_conn_plugin.sh “$1” “$2#添加用户自定义参数

此方法需要在agent配置文件导入自定义配置文件

1
2
[root@localhost zabbix]#vim /usr/local/zabbix/etc/zabbix_agentd.conf
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf

或者直接在agent配置文件中添加自定义监控项

1
2
[root@localhost zabbix]#vim /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=linux_status[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp_conn_plugin.sh “$1” “$2#添加用户自定义参数

重启agent服务

1
[root@localhost zabbix]#/etc/init.d/zabbix_agentd restart

在被监控的服务器为zabbix用户授权

1
2
[root@localhost zabbix]# vi /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL

测试获取数据

1
[root@localhost zabbix]# zabbix_get -s 192.168.15.204 -p 10050 -k "linux_status["tcp_status","LISTEN"]"

监控redis