zabbix
zabbix概念
对于运维人员来说,监控是非常重要的,想要保证线上业务整体能够稳定运行,那么我们就需要实时关注与其相关的各项指标是否正常。一个业务系统背后,往往存在着很多服务器、网络设备等硬件资源,如果我们想方便、集中地管理他们,就需要依靠一些外部的工具, zabbix就是一个被广泛使用的,能够实现集中监控管理的应用程序。
常见的开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等;
- Cacti:基于LAMP平台展现的网络流量监测及分析工具,通过SNMP技术或自定义脚本从目标设备/主机获取监指标信息;其次进行数据存储,调用模版将数据存到数据库,使用rrdtool存储和更新数据,通过rrdtool绘制结果图形;最后进行数据展现通过web方式将监控结果呈现出来。
- 官网:https://www.cacti.net/
- GitHub:https://github.com/Cacti/cacti
- Nagios:用来监视系统和网络的开源应用软件,利用其众多的插件实现对本机和远端服务的监控,当被监控对象发生异常时,会及时向管理员告警,提供一批预设好的监控插件,用户可以之间调用,也可以自定义Shell脚本来监控服务,适合各企业的业务监控,可通过Web页面显示对象状态、日志、告警信息,分层告警机制及自定义监控相对薄弱。
- 官网:https://www.nagios.org/
- Smokeping:是一款用于网络性能监测的开源监控软件,主要用于对IDC的网络状况,网络质量,稳定性等做检测,通过rrdtool制图方式,图形化地展示网络的时延情况,进而能够清楚的判断出网络的即时通信情况。
- 官网:https://oss.oetiker.ch/smokeping/
- 相关博客:http://blogs.studylinux.net/?p=794
- Open-falcon:小米公司开源出来的监控软件,监控能力和性能较强。
- 官网:https://www.open-falcon.org/
- GitHub:https://github.com/XiaoMi/open-falcon
- Zabbix:目前使用较多的开源监控软件,可横向扩展、自定义监控项、支持多种监控方式、可监控网络与服务等。
- 官网:https://www.zabbix.com/cn/
- 商业监控解决方案:
- 监控宝(https://www.jiankongbao.com/)、听云(https://www.tingyun.com/)、……
zabbix支持的通讯方式:
- agent:通过专门的代理程序进行监控,与常见的master/agent模型类似,如果被监控对象支持对应的agent,推荐首选;
- ssh/telnet:通过远程控制协议进行通讯,比如ssh或者telnet。
- SNMP:通过SNMP协议与被监控对象进行通讯,SNMP协议全称Simple Network Management Protocol,译为“简单网络管理协议”,通常来说,我们无法在路由器,交换机这种硬件上安装agent,但是这些硬件往往都支持SNMP协议,SNMP是一种比较久远的、通行的协议,大部分的网络设备都支持这种协议。其实SNMP协议的工作方式也可以理解为master/agent的工作方式,只不过是在这些设备中内置了SNMP的agent而已,所以,大部分的网络设备都支持这种协议。
- IPMI:通过IPMI接口进行监控,我们通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压,温度,风扇状态,电源状态等。
- JMX:通过JMX进行监控,JMX(Java Management Extensions,即Java管理扩展),监控JVM虚拟机时,使用这种方法是非常不错的选择。
一般情况下,我们将zabbix agent部署到被监控主机上,由agent采集数据,报告给负责监控的中心主机,中心主机就是master/agent模型中的master,负责监控的中心主机被称为zabbix server,zabbix server 将从agent端接收到的信息存储到zabbix的数据库中。而zabbix的数据库端被我们称为 zabbix database,如果管理员需要查看各种监控信息,则需要zabbix的GUI,zabbix的GUI是一种 web GUI,我们称为zabbix web,zabbix web 是php编写的,所以,如果想要使用zabbix web展示相关监控信息,需要依赖于LAMP环境,不管是zabbix server,或是zabbix web,他们都需要连接到zabbix database 获取相关数据,如下图:
zabbix支持分布式监控,当监控规模变得庞大时,我们可以把成千上万台的被监控对象分成不同的区域,每个区域中设置一台代理主机,区域内的每个被监控对象的信息被agent采集,提交给代理主机。在这个区域内,代理主机的作用就像是zabbix server,我们称代理主机为zabbix Proxy,zabbix Proxy再将收集到的信息统一提交给zabbix server处理,这样,zabbix Proxy分摊了zabbix server的压力,同时,我们还能够通过统一的监控入口,监控所有的对象,当监控规模大到需要使用zabbix Proxy时,zabbix的架构如下图:
zabbix 各组件:
- zabbix agent :部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix serve
- zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
- zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
- zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
- zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy 代表server端,完成局部区域内的信息收集,再统一发往server端。
agent端采集完数据,主动发送给server端的模式称之为主动模式;agent不主动发送,等待server过来拉取数据,称为被动模式。
zabbix安装
一、Ubuntu上apt安装zabbix
更改Ubuntu的apt源
root@ubuntu:~# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
安装数据库
root@ubuntu:~# wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
root@ubuntu:~# dpkg -i zabbix-release_4.2-1+bionic_all.deb
root@ubuntu:~# apt update
安装Zabbix server,Web前端,agent
root@ubuntu:~# apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-agent
创建初始数据库
root@ubuntu:~# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to [email protected] identified by '123456';
此时MySQL监听的可能是本机的127.0.0.1端口,无法使用IP地址连接,可以修改MySQL监听端口
root@ubuntu:~# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:10050 [::]:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
root@ubuntu:~# vim /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0 #修改成需要的地址
root@ubuntu:~# systemctl restart mysql #重启MySQL
导入初始架构和数据,系统将提示您输入新创建的密码
root@ubuntu:~# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 -h 192.168.184.148 zabbix
编辑配置文件
root@ubuntu:~# vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.184.148
DBPassword=123456
DBPort=3306
为zabbix前端配置PHP
root@ubuntu:~# vim /etc/zabbix/apache.conf
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
启动zabbix server和agent 进程
root@ubuntu:~# systemctl restart zabbix-server zabbix-agent apache2
root@ubuntu:~# systemctl enable zabbix-server zabbix-agent apache2
开始配置web前端,在浏览器上输入zabbix server IP地址/zabbix,开始安装
可以跟着官网的指引安装
https://www.zabbix.com/documentation/4.2/manual/installation/install#installing_frontend
检查全部OK后继续下一步
Database host 输入MySQL所在服务器的IP地址
host 就是zabbix server的IP地址
确认无误后继续下一步
登录用户Admin,密码zabbix
二、编译安装zabbix4.2.4
1.安装Mariadb数据库
root@ubuntu:# apt install mariadb-server mariadb-client -y
2. apt-get install apache2 apache2-bin apache2-data apache2-utils fontconfig-config fonts-dejavu-core fping libapache2-mod-php libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libfontconfig1 libgd3 libiksemel3 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0 libodbc1 libopenipmi0 libsensors4 libsnmp-base libsnmp30 libsodium23 libssh2-1 libtiff5 libwebp6 libxpm4 php-bcmath php-common php-gd php-ldap php-mbstring php-mysql php-xml php7.2-bcmath php7.2-cli php7.2-common php7.2-gd php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml snmpd ssl-cert ttf-dejavu-core libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev openjdk-8-jdk curl libcurl4-openssl-dev
3.下载及编译安装zabbix-4.2.4安装包
root@ubuntu:/usr/local/src# ll
-rw-r--r-- 1 root root 18271978 Jul 13 17:42 zabbix-4.2.4.tar.gz
root@ubuntu:/usr/local/src# tar xvf zabbix-4.2.4.tar.gz
root@ubuntu:/usr/local/src# cd zabbix-4.2.4/
root@ubuntu:/usr/local/src/zabbix-4.2.4# ./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
root@ubuntu:/usr/local/src/zabbix-4.2.4# make && make install
4.创建zabbix数据库并授权
root@ubuntu:~# mysql
MariaDB [(none)]> create database zabbix_server character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_server.* to [email protected] identified by '123456';
5.初始化数据库
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# pwd
/usr/local/src/zabbix-4.2.4/database/mysql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < schema.sql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < images.sql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < data.sql
#确认数据库内表已经生成
6.修改zabbix_server配置文件
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_server.conf
DBHost=192.168.184.148
DBName=zabbix_server
DBUser=zabbix
DBPassword=123456
DBPort=3306
7.这时尝试登陆,会提示不能使用root账户登陆
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_server -c /apps/zabbix_server/etc/zabbix_server.conf
zabbix_server [83451]: user zabbix does not exist
zabbix_server [83451]: cannot run as root!
创建zabbix用户,把zabbix_server目录的属主和属组都改成zabbix
root@ubuntu:~# useradd zabbix
root@ubuntu:~# chown zabbix.zabbix /apps/zabbix_server/ -R
root@ubuntu:~# ll /apps/
drwxr-xr-x 7 zabbix zabbix 4096 Jul 15 11:25 zabbix_server/
8.安装zabbix web界面(把源码包内的PHP文件拷贝到/var/www/html/目录下即可)
root@ubuntu:/var/www/html# pwd
/var/www/html
root@ubuntu:/var/www/html# rm -rf index.html
root@ubuntu:/var/www/html# cp -a /usr/local/src/zabbix-4.2.4/frontends/php/* .
# 如果想要在web页面访问zabbix目录开始安装,就在/var/www/html/下创建一个zabbix目录,把当前目录下的文件拷贝进去
root@ubuntu:/var/www/html# mkdir zabbix
root@ubuntu:/var/www/html# mv ./* zabbix
#####
访问web页面,开始安装前端
root@ubuntu:# apt-get install php-gettext php-xml php-net-socket php-gd php-mysql
root@ubuntu:~# vim /etc/php/7.2/apache2/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
root@ubuntu:~# systemctl restart apache2 #重启Apache,刷新页面,发现错误已经没了
由于是编译安装,所以无法自动生成zabbix.conf.php文件,需要点击下载,上传到/var/www/html/zabbix/conf/目录下
root@ubuntu:/var/www/html/zabbix/conf# ll
total 24
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 12:32 ./
drwxr-xr-x 10 root root 4096 Jul 15 12:13 ../
-rw-r--r-- 1 zabbix zabbix 163 Jun 26 23:22 .htaccess
-rw-r--r-- 1 zabbix zabbix 1036 Jun 26 23:22 maintenance.inc.php
-rw-r--r-- 1 root root 447 Jul 15 12:31 zabbix.conf.php
-rw-r--r-- 1 zabbix zabbix 741 Jun 26 23:22 zabbix.conf.php.example
上传完成后,再次刷新页面,就可以了
点击finish就可以开始登陆,默认用户Admin,密码zabbix
设置编译安装zabbix支持中文
下载中文语言包
apt-get install language-pack-zh*
更改环境变量
vim /etc/environment
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
sudo dpkg-reconfigure locales #进行设置
设置字体,将字体文件上传到/var/www/html/zabbix/assets/fonts/目录下
root@ubuntu:# vim /var/www/html/zabbix/include/defines.inc.php
69 define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
110 define('ZBX_FONT_NAME', 'simkai');
#没有启动脚本时启动zabbix_agent
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_agentd -c /apps/zabbix_server/etc/zabbix_agentd.conf
#启动zabbix_server
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_server -c /apps/zabbix_server/etc/zabbix_server.conf
编写zabbix_server启动脚本
root@ubuntu:~# vim /lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/default/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_server/run/zabbix_server.pid #这里的pid路径要和zabbix_server里的一样
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
~
编写zabbix_agent启动脚本
root@ubuntu:~# vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_server/run/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
创建zabbix的日志目录
root@ubuntu:~# mkdir /apps/zabbix_server/logs/
root@ubuntu:~# chown zabbix.zabbix /apps/zabbix_server/logs/
#修改配置文件中日志存放路径,方便管理
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_server.conf
LogFile=/apps/zabbix_server/logs/zabbix_server.log
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_agentd.conf
LogFile=/apps/zabbix_server/logs/zabbix_agentd.log
Ubuntu设置中文支持
Ubuntu设置中文支持
下载中文语言包
apt-get install language-pack-zh*
更改环境变量
vim /etc/environment
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
sudo dpkg-reconfigure locales #进行设置
配置apt安装的zabbix支持中文
#将字体配置文件上传到服务器
/usr/share/zabbix/assets/fonts/
编辑配置文件,使用新字体
vim /usr/share/zabbix/include/defines.inc.php
69 define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
110 define('ZBX_FONT_NAME', 'graphfont'); #把这两行的graphfont更改为新的字体文件名称,不需要写后缀ttf
#如果ttf是大写的,需要修改为小写
zabbix依赖包 ***
apt-get install apache2 apache2-bin apache2-date apache2-utils fontconfig-config font
设置监控
IP | 服务 | |
---|---|---|
192.168.184.148 | zabbix_server | zabbix_server |
192.168.184.150 | zabbix_agent | zabbix_agent |
配置agent端
编译安装agent端
root@ubuntu:/usr/local/src/zabbix-4.2.4# pwd
/usr/local/src/zabbix-4.2.4
root@ubuntu:/usr/local/src/zabbix-4.2.4# ./configure --prefix=/apps/zabbix_agent --enable-agent
root@ubuntu:/usr/local/src/zabbix-4.2.4# make && make install
修改配置文件
root@ubuntu:/usr/local/src/zabbix-4.2.4# vim /apps/zabbix_agent/etc/zabbix_agentd.conf
Server=192.168.184.148 # zabbix_server 端的IP
Hostname=192.168.184.150 #本机IP
AllowRoot=1 #允许root启动
User=root #设置启动用户为root
PidFile=/apps/zabbix_agent/run/zabbix_agentd.pid
启动zabbix_agent
root@ubuntu:# /apps/zabbix_agent/sbin/zabbix_agentd -c /apps/zabbix_agent/etc/zabbix_agentd.conf
在web页面创建主机
添加模版
添加完成
编写zabbix_agent启动脚本
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_agent/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_agent/run/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
可以使用zabbix_get命令测试监控,测试"agent.ping"返回1,就说明没问题,除了1以外都不对
root@ubuntu:~# zabbix_get -s 192.168.184.150 -p 10050 -k "agent.ping"
1
监控Tomcat
IP | 系统 | |
---|---|---|
192.168.184.148 | zabbix_server、java-gateway | Ubuntu 1804 |
192.168.184.150 | tomcat | Ubuntu 1804 |
192.168.184.151 | java-gateway | Ubuntu 1804 |
1.安装JDK环境
root@ubuntu:~# apt-get install openjdk-8-jdk
安装Tomcat
root@ubuntu:/usr/local/src# tar xvf apache-tomcat-8.5.37.tar.gz -C /usr/local/
root@ubuntu:/usr/local/src# ln -s /usr/local/apache-tomcat-8.5.37/ /usr/local/tomcat
root@ubuntu:/usr/local/src# cd ../tomcat
root@ubuntu:/usr/local/tomcat# cat webapps/ROOT/index.html
haomeng test
修改配置
root@ubuntu:/usr/local/tomcat# vim 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.184.150" #tomcat主机自己的IP地址,不要写zabbix服务器的地址
root@ubuntu:/usr/local/tomcat# ./bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
root@ubuntu:/usr/local/tomcat# ./bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#此处可以使用Windows JDK检测配置情况,看到里面有数据就OK(如图一)
2.配置java-gateway
#编译安装时,java-gateway也被一起安装到了目录中
#在zabbix_server端
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# pwd
/apps/zabbix_server/sbin/zabbix_java
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ll
total 28
drwxr-xr-x 4 zabbix zabbix 4096 Jul 15 16:16 ./
drwxr-xr-x 3 zabbix zabbix 4096 Jul 15 11:25 ../
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 11:25 bin/
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 11:25 lib/
-rw-r--r-- 1 zabbix zabbix 1084 Jul 15 16:16 settings.sh
-rwxr-xr-x 1 zabbix zabbix 545 Jul 15 11:25 shutdown.sh*
-rwxr-xr-x 1 zabbix zabbix 1800 Jul 15 11:25 startup.sh*
root@ubuntu:# vim /apps/zabbix_server/sbin/zabbix_java/settings.sh
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=10
TIMEOUT=30
******************
java-gateway不需要和zabbix_server装在同一台主机上,可以在其他主机,使用apt-get install zabbix-java-gateway 进行安装
******************
启动java-gateway
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ./startup.sh
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 80 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 50 *:10052 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
**************
***下面是不同主机使用apt安装java-gateway
root@ubuntu:~# apt-get install zabbix-java-gateway
root@ubuntu:~# vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"
START_POLLERS=5
TIMEOUT=30
启动java-gateway
root@ubuntu:~# systemctl start zabbix-java-gateway
#检查是否监听了10052端口
3.在zabbix_server上配置java-gateway
JavaGateway=192.168.184.148 #这里使用的是相同主机的java-gateway
JavaGatewayPort=10052
StartJavaPollers=20
重启zabbix_server
root@ubuntu:~# systemctl restart zabbix-server
在web页面添加主机
图一:
Tomcat配置监控完成后,如果web界面采集不到数据,可以在server端使用命令方式测试
命令行方式需要下载cmdline-jmxclient-0.10.3.jar
包
#查询最大线程数
root@ubuntu:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.184.150:12345 'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
07/17/2019 10:04:57 +0800 org.archive.jmx.Client maxThreads: 200
#查看当前线程数
root@ubuntu:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.184.150:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
07/17/2019 10:05:30 +0800 org.archive.jmx.Client currentThreadCount: 10
#能够返回数据,就说明监控tomcat没有问题
监控nginx
主机 | IP | 服务 |
---|---|---|
zabbix-server | 192.168.184.148 | zabbix-server |
zabbix-nginx | 192.168.184.151 | zabbix-agent 、nginx |
#在新的主机上安装zabbix_agent
#编译安装nginx
root@ubuntu:/usr/local/src# tar xvf nginx-1.14.2.tar.gz
root@ubuntu:/usr/local/src# cd nginx-1.14.2/
root@ubuntu:/usr/local/src/nginx-1.14.2#./configure --prefix=/apps/nginx/ --with-http_stub_status_module #必须添加这个模块
root@ubuntu:/usr/local/src/nginx-1.14.2# make && make install
root@ubuntu:~# vim /apps/nginx/conf/nginx.conf
#添加下面几行
location /nginx_status {
stub_status;
}
#测试nginx配置没有问题
root@ubuntu:~# /apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx//conf/nginx.conf test is successful
root@ubuntu:~# /apps/nginx/sbin/nginx #启动
到浏览器上访问192.168.184.151/nginx_status
,能够看到状态信息
#编写脚本,获取nginx的状态页信息
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# pwd
/apps/zabbix_agent/etc/zabbix_agentd.conf.d
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# vim check_nginx.sh
#!/bin/bash
#
host=${2:-'127.0.0.1'}
port=${3:-'80'}
page=${4:-'nginx_status'}
info=$(/usr/bin/curl --connect-timeout 5 -s http://${host}:${port}/${page} 2>/dev/null)
code=$(/usr/bin/curl --connect-timeout 5 -o /dev/null -s -w %{http_code} http://${host}:${port}/${page})
proc=$(/usr/bin/pgrep nginx | wc -l)
case "$1" in
status)
echo "$code $proc" | awk '{code=$1}{proc=$2}END{if(code == "200" && proc != 0){printf("%d\n",1)}else{printf("%d\n",0)}}'
;;
active)
echo "$info" | awk '/^Active/{var=$NF}END{if(var~/^[0-9]+$/){printf("%d\n",var)}else{printf("%d\n",0)}}'
;;
reading)
echo "$info" | awk '/Reading/ {print $2}'
;;
writing)
echo "$info" | awk '/Writing/ {print $4}'
;;
waiting)
echo "$info" | awk '/Waiting/ {print $6}'
;;
accepts)
echo "$info" | awk 'NR==3 {print $1}'
;;
handled)
echo "$info" | awk 'NR==3 {print $2}'
;;
requests)
echo "$info" | awk 'NR==3 {print $3}'
;;
restimes)
echo "$info" | awk 'BEGIN{OFMT="%.3f"} NR==3 {print $4/$3}'
;;
*)
echo "ZBX_NOTSUPPORTED"
;;
esac
给脚本添加执行权限
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# chmod a+x check_nginx.sh
修改zabbix-agent配置文件
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# vim /apps/zabbix_agent/etc/zabbix_agentd.conf
UserParameter=nginx.status[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/check_nginx.sh $1 $2
Include=/apps/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf #脚本所在目录
重启zabbix-agent服务
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# systemctl restart zabbix-agent
在web端添加自定义模板
#由于zabbix没有监控nginx模版,所以我们需要自定义模版
1.创建模版
2.创建应用集
3.创建监控项
键值部分,填的就是zabbix-agent配置文件中UserParameter的key和脚本里的参数
4.创建图形
创建完成后,只要和将主机与模版链接就可以使用了
在server端,可以使用zabbix_get命令检测监控结果
zabbix proxy
主动模式与被动模式
- 是针对zabbix-agent端来说的,被动模式就是zabbix-server向zabbix-agent发送指令获取数据,即zabbix-agent被动的去获取数据并返回给zabbix-server。zabbix server周期性的向agent 索取数据,这种模式的最大问题就是会加大zabbix server的工作量,在数百台服务器的环境下zabbix server不能及时获取到最新数据,但这也是默认的工作方式。
- 主动模式是有zabbix agent主动采集数据并返回给zabbix server,不再需要zabbix serve进行干预,因此主动模式在一定程度上可减轻zabbix server的压力。
当监控规模过大,就会给zabbix-server端带来很大的压力,这时,就需要用到zabbix-proxy代理来缓解压力。
zabbix是一个分布式的监控系统,支持通过代理服务器zabbix-proxy收集zabbix-agent的数据,然后把收集到的数据保存在本地数据库,并统一发送给zabbix-server进行存储和展示。
zabbix-proxy工作模式:
安装zabbix-proxy
主机清单
系统 | IP | 服务 |
---|---|---|
Ubuntu | 192.168.184.148 | zabbix-server |
centos 7.6 | 192.168.184.144 | zabbix-proxy(被动)、MySQL |
centos7.6 | 192.168.184.143 | zabbix-proxy(主动) |
被动模式proxy
首先安装依赖包
[root@t2 ~]# 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
准备数据库
[root@t2 ~]# yum install mariadb-server
[root@t2 ~]# mysql
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';
[root@t2 zabbix-4.2.4]# ./configure --prefix=/apps/zabbix_proxy/ --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
[root@t2 zabbix-4.2.4]# make && make install
导入数据库
[root@t2 zabbix-4.2.4]# mysql -uproxy -p123456 -h 192.168.184.144 zabbix_proxy < database/mysql/schema.sql
配置zabbix-proxy
[root@t2 ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1 #0为主动,1为被动
Server=192.168.184.148 #zabbix server服务器的地址或主机名
Hostname=zabbix-proxy-test1 # 代理服务器名称,需要与zabbix server添加代理时proxy name一致
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.184.144 #数据库服务器地址
DBName=zabbix_proxy #数据库名称
DBUser=proxy #连接数据库用户名
DBPassword=123456 #数据库用户密码
DBPort=3306 #数据库端口
ProxyLocalBuffer=3 #已经提交到zabbix server的数据保留时间
ProxyOfflineBuffer=24 #未提交到zabbix server的数据保留时间
HeartbeatFrequency=60 #心跳间隔检测时间,默认1秒,范围1-3600秒,被动模式不使用
ConfigFrequency=5 #间隔多久从zabbix server获取监控信息
DataSenderFrequency=5 数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
StartPollers=20 #启动的数据采集器数量
JavaGateway=192.168.184.144 #JavaGateway服务器地址,监控java时需要配置
JavaGatewayPort=10052 #JavaGAteway服务端口
StartJavaPollers=20 #启动多少个线程采集数据
CacheSize=100M #保存监控项而占用的最大内存
HistoryCacheSize=100M #保存监控历史数据占用的最大内存
Timeout=30 #监控超时时间,单位为秒
LogSlowQueries=3000 #毫秒,多久的数据库查询会被记录到日志
StatsAllowedIP=127.0.0.1
配置agent(proxy与agent不一定要在同一台主机)
[root@t2 ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
DebugLevel=4
Server=192.168.184.148,192.168.184.144
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.184.148
Hostname=192.168.184.144
Timeout=30
UnsafeUserParameters=1
启动服务
[root@t2 ~]# /apps/zabbix_proxy/sbin/zabbix_proxy -c /apps/zabbix_proxy/etc/zabbix_proxy.conf
[root@t2 ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
添加被动代理
添加被动模式主机
验证数据,此过程需要一段时间,在zabbix server,zabbix proxy,zabbix agent 没有报错的情况下,需要耐心等待
主动模式proxy
在192.168.184.143上部署zabbix proxy 主动模式
[root@zabbix-proxy-z ~]# 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
准备数据库
[root@zabbix-proxy-z ~]# yum install mariadb-server
[root@zabbix-proxy-z ~]# mysql
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy_zhu.* to proxy@'%' identified by '123456';
[root@zabbix-proxy-z zabbix-4.2.4]# ./configure --prefix=/apps/zabbix_proxy/ --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
[root@zabbix-proxy-z zabbix-4.2.4]# make && make install
导入数据库
[root@zabbix-proxy-z zabbix-4.2.4]# mysql -uproxy -p123456 -h 192.168.184.144 zabbix_proxy_zhu < database/mysql/schema.sql
配置zabbix proxy
[root@zabbix-proxy-z ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=0
Server=192.168.184.148
Hostname=zabbix-proxy-test2
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.184.144
DBName=zabbix_proxy_zhu
DBUser=proxy
DBPassword=123456
DBPort=3306
ProxyLocalBuffer=3
ProxyOfflineBuffer=24
HeartbeatFrequency=60
ConfigFrequency=5
DataSenderFrequency=5
StartPollers=20
JavaGateway=192.168.184.144
JavaGatewayPort=10052
StartJavaPollers=20
CacheSize=100M
HistoryCacheSize=100M
Timeout=30
LogSlowQueries=3000
配置zabbix agent
[root@zabbix-proxy-z ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
DebugLevel=4
Server=192.168.184.148,192.168.184.143
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.184.148,192.168.184.143
Hostname=192.168.184.143
Timeout=30
UnsafeUserParameters=1
启动服务
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_proxy -c /apps/zabbix_proxy/etc/zabbix_proxy.conf
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
添加主动代理
添加主动模式主机
在监控项部分,更改客户端为主动模式
验证数据
主动模式监控Tomcat
系统 | IP | 服务 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server 、java-gateway |
centos7.6 | 192.168.184.143 | zabbix proxy 、Tomcat 、openjdk1.8.0_212 |
在192.168.184.143上安装jdk和tomcat
[root@zabbix-proxy-z ]# yum install java-1.8.0-openjdk
[root@zabbix-proxy-z ]# tar xvf apache-tomcat-8.5.37.tar.gz -C /apps/
添加配置
[root@zabbix-proxy-z apps]# vim /apps/apache-tomcat-8.5.37/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.184.143"
启动Tomcat
[root@zabbix-proxy-z apps]# /apps/apache-tomcat-8.5.37/bin/catalina.sh start
在zabbix控制台指定主机添加jmx监控
关联模版
验证监控数据
监控TCP连接数
1.创建获取数据的脚本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat tcp_conn.sh
#!/bin/bash
tcp_conn_status(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /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
2.添加执行权限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod a+x tcp_conn.sh
3.创建conf文件引用脚本
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf.d/ all.conf
UserParameter=linux_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/tcp_conn.sh "$1" "$2"
或者
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=linux_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/tcp_conn.sh "$1" "$2"
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf #配置agent配置文件导入自定义的配置文件
重启agent服务
[root@zabbix-proxy-z ~]# pkill zabbix_agent
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
由于没有写service启动脚本,所以使用这种方式重启服务
在被监控端为zabbix用户授权
[root@zabbix-proxy-z ~]# vim /etc/sudoers
99 zabbix ALL =(ALL) NOPASSWD: ALL
在zabbix server上测试获取数据
中间出现了权限的错误
这是由于/tmp下的临时文件tcp_conn.txt的属主是root,所以会报权限错误。可以选择把tcp_conn.txt的属主改成zabbix,或者删除文件,让它重新生成
导入并关联模版
验证连接数据
监控memcache
系统 | IP | 服务 |
---|---|---|
centos7.6 | 192.168.184.143 | memcached |
安装并启动memcached
[root@zabbix-proxy-z ~]# yum install memcached
[root@zabbix-proxy-z ~]# systemctl start memcached
编写监控脚本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pwd
/apps/zabbix_proxy/etc/zabbix_agentd.conf.d
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim memcached.sh
#!/bin/bash
memcached_status(){
M_PORT=$1
M_COMMAND=$2
echo -e "stats\nquit" |nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" |awk '{print $3}'
}
main(){
case $1 in
memcached_status)
memcached_status $2 $3
;;
esac
}
main $1 $2 $3
添加执行权限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chown zabbix.zabbix memcached.sh
修改属主和属组
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod +x memcached.sh
配置agent文件调用脚本
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=memcached_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/memcached.sh "$1" "$2" "$3"
重启agent
[root@zabbix-proxy-z ]# pkill zabbix_agent
[root@zabbix-proxy-z ]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
在 zabbix server端导入模版(或手动创建)
关联主机并验证数据
监控redis
系统 | IP | 服务 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos7.6 | 192.168.184.143 | redis |
安装部署redis
[root@zabbix-proxy-z ~]# yum install epel-release -y
[root@zabbix-proxy-z ~]# yum install redis -y
[root@zabbix-proxy-z ~]# vim /etc/redis.conf
bind 0.0.0.0
[root@zabbix-proxy-z ~]# systemctl start redis
编写监控redis脚本
#!/bin/bash
redis_status(){
R_PORT=$1
R_COMMAND=$2
(echo -en "INFO \r\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
echo $REDIS_STAT_VALUE
}
help(){
echo "${0} + redis_status + PORT + COMMAND"
}
main(){
case $1 in
redis_status)
redis_status $2 $3
;;
*)
help
;;
esac
}
main $1 $2 $3
添加执行权限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod +x redis_status.sh
测试能否获取数据
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash redis_status.sh redis_status 6379 total_net_output_bytes
43484
修改zabbix agent配置文件
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=redis_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/redis_status.sh "$1" "$2" "$3"
在zabbix server端进行测试(这时在/tmp/目录下会生成一个redis_6379.tmp文件,所有者与所有组都是root,需要将其删除,或者将所有者所有组改成zabbix,否则在zabbix server端测试会报权限错误)
[root@zabbix-proxy-z zabbix_agentd.conf.d]# ll /tmp/
-rw-r--r-- 1 root root 2141 Jul 24 10:53 redis_6379.tmp #删除这个文件,或者改所有者所有组
[root@zabbix-proxy-z zabbix_agentd.conf.d]# rm -rf /tmp/redis_6379.tmp
在zabbix server端验证脚本
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "redis_status[redis_status,6379,used_memory_lua_human]"
37.00K
在server端创建监控模版
创建监控项
创建图形
关联到主机并验证数据
zabbix实现nginx故障自治愈
系统 | IP | 服务 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos | 192.168.184.143 | nginx |
安装部署nginx
[root@zabbix-proxy-z ~]# yum install nginx -y
[root@zabbix-proxy-z ~]# vim /etc/nginx/nginx.conf
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
启动服务
[root@zabbix-proxy-z ~]# systemctl start nginx
编写nginx监控脚本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat nginx_status.sh
#!/bin/bash
nginx_status_fun(){ #函数内容
NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){ #获取nginx_reading状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main(){ #主函数内容
case $1 in #分支结构,用于判断用户的输入而进行响应的操作
nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
nginx_status_fun $2 $3;
;;
*) #其他的输入打印帮助信息
echo $"Usage: $0 {nginx_status key}"
esac #分支结束符
}
main $1 $2 $3
配置zabbix agent 配置文件
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=nginx.status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/nginx_status.sh "$1" "$2" "$3"
重启zabbix agent
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pkill zabbix_agent
[root@zabbix-proxy-z zabbix_agentd.conf.d]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
server端测试验证
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "nginx.status[nginx_status,80,requests]"
11667
server端导入模版
关联模版到主机,并验证数据
设置邮件报警
创建报警媒介类型
这里的密码指的是邮箱的smtp授权码,需要到邮箱里打开
打开smtp服务,然后生成授权码,就是第三方客户端登录时的密码
配置动作
配置故障具体操作
定义恢复内容
添加用户报警媒介
测试关闭192.168.184.143的80端口,zabbix则会发送邮件报警
重新开启80端口时,同样会发送邮件提醒
实现分级报警
创建一个新的用户,并设置媒介类型,以及权限
添加动作,设置分级报警
再次关闭80端口测试
(两个邮箱都收到了报警)
打开80端口
实现nginx自治愈
创建nginx自治愈动作
对zabbix agent进行配置
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
EnableRemoteCommands=1 #允许远程命令
UnsafeUserParameters=1 #允许特殊字符
给zabbix用户添加sudo权限,设置nopasswd
[root@zabbix-proxy-z ~]# vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL
重启zabbix agent
[root@zabbix-proxy-z ~]# pkill zabbix_agent
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
停止nginx服务进行测试
zabbix 监控到80端口关闭后,认为nginx服务不存在,zabbix用户自动开启了nginx服务
SNMP协议
SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议,SNMP是一种简单网 络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。
SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使 得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空 间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
SNMP协议是TCP/IP协议簇的一个应用层协议,在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个 短期的网络管理解决方案,由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以 增强SNMPv1的安全性和功能,SNMP的协议版本目前有SNMP v1、SNMP v2c和SNMP v3三种版本,其具体差别如下:
-
SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP报文携带的团体 名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用,用来限制SNMP NMS对SNMP Agent的访问。
- SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型(GetBulk和InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细致地区分错误。
- SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证和加密功能,认证用于 验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和SNMP Agent之间的通信提供更高的安全性。
SNMP工作机制
SNMP的工作机制SNMP网络元素分为NMS和Agent两种:
- NMS(Network Management Station,网络管理站)是运行SNMP客户端程序的工作站,能够提供非常友好的人机交互界面,方便 网络管理员完成绝大多数的网络管理工作。
- Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent 也会主动通知NMS。
- NMS是SNMP网络的管理者,Agent是SNMP网络的被管理者。NMS和Agent之间通过SNMP协议来交互管理信息。
SNMP数据交互
SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:
- get-request操作:从代理进程处提取一个或多个参数值。
- get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
- set-request操作:设置代理进程的一个或多个参数值。
- get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。
- trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
SNMP组织结构
一套完整的SNMP系统主要包括以下几个方面:
- SNMP报文协议
- 管理信息机构(SMI, Structure ofManagement Information),一套公用的结构和表示符号。)
- 管理信息库(MIB,Management Information Base),管理信息库包含所有代理进程的所有可被查询和修改的参数。
- OID(Object Identifiers),一个OID是一个唯一的键值对,用于标识具体某一个设备的某个具体信息(对象标识), 如端口信息、设备名称等。
SNMP MIB
所谓(MIB)管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。MIB是基于 对象标识树的,对象标识是一个整数序列,中间以"."分割,这些整数构成一个树型结构,类似于 D N S或U n i x的文 件系统,M I B被划分为若干个组,如s y s t e m、 i n t e r f a c e s、 a t(地址转换)和i p组等。i s o . o r g . d o d . i n t e r n e t .p r i v a t e . e n t e r p r i s e s( 1 . 3 . 6 . 1 . 4 . 1)这个标识,是给厂家自定义而预留的,比如华为的为1.3.6.1.4.1.2011, 华三的为1.3.6.1.4.1.25506。
SNMP OID
Centos 部分常用的OID:
CPU负载 | 1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1 |
---|---|
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2 | |
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3 | |
CPU信息 | percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0 |
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0 | |
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0 | |
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0 | |
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0 | |
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0 | |
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0 | |
系统信息 | sysDescr 1.3.6.1.2.1.1.1 |
sysObjectID 1.3.6.1.2.1.1.2 | |
sysUpTime 1.3.6.1.2.1.1.3 | |
sysContact 1.3.6.1.2.1.1.4 | |
sysName 1.3.6.1.2.1.1.5 | |
内存使用 | Total Swap Size: .1.3.6.1.4.1.2021.4.3.0 |
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0 | |
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0 | |
Total RAM used: .1.3.6.1.4.1.2021.4.6.0 | |
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0 | |
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0 | |
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0 | |
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0 | |
硬盘使用 | Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1 |
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1 | |
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1 | |
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1 | |
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1 | |
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1 | |
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1 |
如何测试OID:
snmpwalk是SNMP的一个工具,它使用SNMP的GET请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。
要使用snmpwalk需要先安装net-snmp软件包
[root@s1 ~]# yum -y install net-snmp-utils
[root@s1 ~]# snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
–h:显示帮助。
–v:指定snmp的版本, 1或者2c或者3。
–c:指定连接设备SNMP密码。
–V:显示当前snmpwalk命令行版本。
–r:指定重试次数,默认为0次。
–t:指定每次请求的等待超时时间,单为秒,默认为3秒。
–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。
–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。
–x:加密协议:DES。只有-l指定为authPriv时才需要。
–X:加密字符串。只有-l指定为authPriv时才需要。
模拟使用snmp协议监控网络设备
系统 | IP | 服务 |
---|---|---|
Ubuntu | 192.168.184.148 | zabbix server |
centos | 192.168.184.146 | 网络设备 |
在192.168.184.146主机上
安装snmp包,将192.168.184.146作为网络设备
[root@snmp ~]# yum install net-snmp -y
[root@snmp ~]# vim /etc/snmp/snmpd.conf
com2sec notConfigUser default 123456 #设置团体认证,默认为public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser #将团体名称notConfigUser关联至组notConfigGroup
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6. 创建view,并对其授权可访问的OID范围
access notConfigGroup "" any noauth exact systemview none none #将组notConfigGroup关联至systemview 从而完成组的授权
启动服务
[root@snmp ~]# systemctl restart snmpd
[root@snmp ~]# systemctl enable snmpd
Created symlink from /etc/systemd/system/multi-user.target.wants/snmpd.service to /usr/lib/systemd/system/snmpd.service.
[root@snmp ~]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:161 *:*
UNCONN 0 0 *:60608 *:*
UNCONN 0 0 *:68 *:*
UNCONN 0 0 :::33848 :::*
在zabbix server端测试能否通过SNMOP采集数据:
root@zabbix-server:~# snmpwalk -v 2c -c 123456 192.168.184.146 .1.3.6.1.4.1.2021.10.1.3.1
iso.3.6.1.4.1.2021.10.1.3.1 = STRING: "0.00"
root@zabbix-server:~# snmpwalk -v 2c -c 123456 192.168.184.146 .1.3.6.1.4.1.2021.10.1.3.2
iso.3.6.1.4.1.2021.10.1.3.2 = STRING: "0.01"
在server上创建主机
关联模版
由于前面我们修改了团体认证为123456,所以需要在server上把团体认证改成一样
验证监控数据
监控MySQL
系统 | IP | 服务 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos7.6 | 192.168.184.144 | MySQL master |
centos7.6 | 192.168.184.143 | MySQL slave |
部署MySQL主从
部署MySQL主从
1.配置MySQL master
[root@t2 yum.repos.d]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=10
log-bin=/data/mysql/master-log
2.重启MySQL
[root@t2~]# systemctl restart mariadb
3.创建复制用户
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'rsync-user'@'192.168.184.%' IDENTIFIED BY '123456';
4.完全备份数据
[root@t2~]# mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql
5.将备份数据拷贝到slave上
[root@t2 ~]# scp /opt/backup.sql 192.168.184.146:/root/backup.sql
6.查看二进制日志位置
MariaDB [(none)]> show master logs;
+-------------------+-----------+
| Log_name | File_size |
+-------------------+-----------+
| master-log.000001 | 410490 |
| master-log.000002 | 578037 |
| master-log.000003 | 4772456 |
+-------------------+-----------+
7.配置MySQL slave
[root@zabbix-proxy-z ~]# vim /etc/my.cnf
[mysqld]
server-id=21
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
8.启动MySQL
[root@zabbix-proxy-z ~]# systemctl start mariadb
9.导入master的数据
MariaDB [(none)]> source backup.sql
10.配置同步信息
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='192.168.184.144',
MASTER_USER='rsync-user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-log.000003',
MASTER_LOG_POS=4772456;
11.启动复制
MariaDB [(none)]> start slave;
12.确认复制状态
MariaDB [zabbix_proxy_zhu]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.184.144
Master_User: rsync-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000003
Read_Master_Log_Pos: 5378824
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 606902
Relay_Master_Log_File: master-log.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
使用percona监控MySQL
安装部署percona
1.官方文档及下载地址:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html #插件地址
https://www.percona.com/downloads/ #下载地址
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html#installation-instructions #安装教程
2.本地安装部署
[root@zabbix-proxy-z ~]#yum install php php-mysql -y #安装php环境
3.安装模版文件
[root@zabbix-proxy-z ~]#wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
[root@zabbix-proxy-z ~]#rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
4.拷贝配置文件
[root@zabbix-proxy-z ~]#cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /apps/zabbix_proxy/etc/zabbix_agentd.conf.d/
5.修改zabbix agent配置文件
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf
6.重启zabbix agent
[root@zabbix-proxy-z ~]# systemctl restart zabbix-agent
7.创建ss_get_mysql_stats.php.cnf文件,配置连接mysql用户和密码
[root@zabbix-proxy-z ~]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
在server上导入模板 zbx_mysql_export_templates.xml,更改模版模式为主动模式,关联到主机
验证数据:
自定义监控数据库
1.编写监控MySQL脚本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pwd
/apps/zabbix_proxy/etc/zabbix_agentd.conf.d
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat mysql_monitor.sh
#!/bin/bash
Seconds_Behind_Master(){
NUM=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
echo $NUM
}
master_slave_check(){
NUM1=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" && test $NUM2 == "Yes";then
echo 50
else
echo 100
fi
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
master_slave_check)
master_slave_check
;;
esac
}
main $1
导入自定义配置
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf
自定义监控项
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat mysql_monitor.conf
UserParameter=mysql_monitor[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/mysql_monitor.sh $1
测试脚本,当slave复制开启时,获取到的值为50,停止时为100
#start slave;
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash mysql_monitor.sh master_slave_check
50
#stop slave;
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash mysql_monitor.sh master_slave_check
100
在server上使用zabbix_get测试
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "mysql_monitor[master_slave_check]"
100
确认无误后,重启zabbix-agent
[root@zabbix-proxy-z]# systemctl restart zabbix-agent
在server上创建监控模版
添加监控项
关联主机
创建图形
创建触发器
验证数据
添加动作
当slave复制停止时,zabbix 会检测到,并且发送邮件报警
MySQL主从同步自治愈
添加动作
添加操作
手段停止复制进行测试
[root@zabbix-proxy-z zabbix_agentd.conf.d]# mysql -e "stop slave"
然后再查看slave status 状态已经恢复正常
[root@zabbix-proxy-z zabbix_agentd.conf.d]# mysql -e "show slave status\G"
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.184.144
Master_User: rsync-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000003
Read_Master_Log_Pos: 18632349
Relay_Log_File: mariadb-relay-bin.000006
Relay_Log_Pos: 437035
Relay_Master_Log_File: master-log.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
IO监控
实现短信/微信报警
1.微信报警
1.注册一个企业微信
2.自建一个应用
3.在zabbix server上创建媒介类型
4.给用户添加报警
安装python模块
root@zabbix-server:~# apt-get install python-pip
root@zabbix-server:~# pip install requests