? 对于运维人员来说,监控是非常重要的,想要保证线上业务整体能够稳定运行,那么我们就需要实时关注与其相关的各项指标是否正常。一个业务系统背后,往往存在着很多服务器、网络设备等硬件资源,如果我们想方便、集中地管理他们,就需要依靠一些外部的工具, zabbix就是一个被广泛使用的,能够实现集中监控管理的应用程序。
常见的开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等;
一般情况下,我们将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的架构如下图:
agent端采集完数据,主动发送给server端的模式称之为主动模式;agent不主动发送,等待server过来拉取数据,称为被动模式。
更改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 zabbix@192.168.184.148 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
<IfModule mod_php7.c>
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
</IfModule>
启动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
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 zabbix@192.168.184.148 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设置中文支持
下载中文语言包
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
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没有问题
主机 | 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-server端带来很大的压力,这时,就需要用到zabbix-proxy代理来缓解压力。
zabbix是一个分布式的监控系统,支持通过代理服务器zabbix-proxy收集zabbix-agent的数据,然后把收集到的数据保存在本地数据库,并统一发送给zabbix-server进行存储和展示。
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(主动) |
首先安装依赖包
[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 没有报错的情况下,需要耐心等待
在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
添加主动代理
添加主动模式主机
在监控项部分,更改客户端为主动模式
验证数据
系统 | 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监控
关联模版
验证监控数据
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,或者删除文件,让它重新生成
导入并关联模版
验证连接数据
系统 | 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端导入模版(或手动创建)
关联主机并验证数据
系统 | 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端创建监控模版
创建监控项
创建图形
关联到主机并验证数据
系统 | 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自治愈动作
对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是英文“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的工作机制SNMP网络元素分为NMS和Agent两种:
SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:
一套完整的SNMP系统主要包括以下几个方面:
所谓(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。
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时才需要。
系统 | 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上把团体认证改成一样
验证监控数据
系统 | 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主从
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
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
<?php
$mysql_user = ‘root‘;
$mysql_pass = ‘‘; #由于我的MySQL没有设置密码,故不填
8.测试数据
[root@zabbix-proxy-z ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
5630
注:能够获取到数据就代表正常,也可以在server端使用zabbix_get测试。
如果无法获取数据,就要查看/tmp目录下是否有一个localhost-mysql_cacti_stats.txt文件,有的话就将其权限改为zabbix用户和组
[root@zabbix-proxy-z ~]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "MySQL.Key-read-requests"
5630
在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 会检测到,并且发送邮件报警
添加动作
添加操作
手段停止复制进行测试
[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
1.注册一个企业微信
2.自建一个应用
3.在zabbix server上创建媒介类型
4.给用户添加报警
安装python模块
root@zabbix-server:~# apt-get install python-pip
root@zabbix-server:~# pip install requests
原文:https://blog.51cto.com/14233371/2423975