zabbix分布式企业级监控系统

1、搭建zabbix服务器,监控linux系统和tomcat,mysql

在ubuntu上apt安装zabbix 4.0LTS
下载网址:https://www.zabbix.com/cn/download?zabbix=4.0&os_distribution=ubuntu&os_version=18.04_bionic&db=mysql&ws=apache

a. Install Zabbix repository

root@zabbix-proxy-active:~# dpkg -i zabbix-release_4.0-3+bionic_all.deb
root@zabbix-proxy-active:~# apt update

b. 安装Zabbix server,Web前端,agent

root@zabbix-proxy-active:~# apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent

c. 创建初始数据库
Make sure you have database server up and running.
在数据库主机上运行以下代码

root@zabbix-mysql-master:~#  mysql
mysql> create database zabbixtest character set utf8 collate utf8_bin;
mysql> create user zabbix@'172.31.%.%' identified by '123456';
mysql> grant all privileges on zabbixtest.* to zabbix@'172.31.%.%'; 

导入初始架构和数据,系统将提示您输入新创建的密码

root@zabbix-mysql-master:~# zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p123456 -h172.31.7.104 zabbixtest

d. 为Zabbix server配置数据库

root@zabbix-proxy-active:~# vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=172.31.7.104
DBName=zabbixtest
DBUser=zabbix
DBPassword=123456
root@zabbix-proxy-active:~# systemctl restart zabbix-server

e. 为Zabbix前端配置PHP

root@zabbix-proxy-active:~# vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai

f. 启动zabbix server和agent进程

root@zabbix-proxy-active:~# systemctl restart zabbix-server zabbix-agent apache2
root@zabbix-proxy-active:~# systemctl enable zabbix-server zabbix-agent apache2

g. 浏览器访问172.31.7.102/zabbix

1.png

2.png

3.png

4.png

6.png

7.png

8.png

用户名:Admin
Password:zabbix
9.png

如果有错误可修改 /usr/share/zabbix/conf/zabbix.conf.php

root@zabbix-proxy-active :~# vim /usr/share/zabbix/conf/zabbix.conf.php
$ZBX_SERVER     = '172.31.7.102'
root@zabbix-proxy-active :~# systemctl restart apache2

刷新网页

10.png

Web界面中文菜单环境

1.中文选项无法选择
由于ubuntu系统目前未安装中文语言环境所以无法选择中文显示,如下:

11.png

2. ubuntu系统安装中文语言环境
安装并设置中文简体语言环境

#安装简体中文语言环境
root@zabbix-server:~# sudo apt-get install language-pack-zh*

#增加中文语言环境变量
root@zabbix-server:~# sudo vim /etc/environment
PATH= "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LANG= "zh_CN.UTF-8"

#重新设置本地配置
root@zabbix-server:~# sudo dpkg-reconfigure locales

1.png

2.png

3.png

3. 验证web界面
重启apache并验证web界面

root@zabbix-server:~# systemctl restart apache2
4.png

5.png

6.png
监控项与乱码

1. 图形乱码
当前系统有些监控项部分显示有乱码,是由于web界面显示为中文但是系统没有相关字体支持,因此需要相关字体的支持才能正常显示,如下:

a.png

2. 上传字体文件

2.1 在windows拷贝字体
在windows上c:/Windows/Fonts/ -- 楷体(或其他中文字体),然后将字体拷贝到windows当前用户的桌面

b.png

2.2 上传字体到zabbix web目录
将windows字体上传至zabbix web目录,具体路径为/ZABBIX/WEB/PATH/assets/fonts

root@zabbix-server:~# cd /var/www/html/zabbix/assets/fonts/
root@zabbix-server:/var/www/html/zabbix/assets/fonts#    #上传楷体字体文件到这里

2.3 修改zabbix文件调用新字体

root@zabbix-server:/var/www/html/zabbix# vim include/defines.inc.php
#70 define('ZBX_GRAPH_FONT_NAME',     'DejaVuSans'); // font file name
70 define('ZBX_GRAPH_FONT_NAME',  'simkai'); // font file name

#111 define('ZBX_FONT_NAME',  'DejaVuSans');
111 define('ZBX_FONT_NAME',  'simkai');

2.4 验证字体是否生效
通常不需要重启zabbix及apache,修改后的字体文件即可直接生效

e.png

监控linux系统

在172.31.7.106 linux服务器安装zabbix agent,然后添加到zabbix server以对其进行资源监控

1. zabbix agent 安装

root@zabbix-web1:~# dpkg -i zabbix-release_4.0-3+bionic_all.deb
root@zabbix-web1:~# apt update
root@zabbix-web1:~# apt install zabbix-agent

2. zabbix agent 配置文件

root@zabbix-web1:~# vim /etc/zabbix/zabbix_agentd.conf
##### Passive checks related  #被动检查相关配置
Server=172.31.7.101   #指向当前zabbix server

### Option:ListenPort
ListenPort=10050   #监听端口
ListenIP=0.0.0.0

### Option:StartAgents
StartAgent=5   #被动状态时默认启动的实例数(进程数),为0不监听任何端口

### Option:Hostname
Hostname=172.31.7.106  #区分大小写且在zabbix server唯一的值

3. 重启 zabbix agent

root@zabbix-web1:~# systemctl restart zabbix-agent
root@zabbix-web1:~# systemctl enable zabbix-agent

4. 验证 zabbix agent
验证zabbix agent进程是否存在、端口是否监听以及日志是否有异常

root@zabbix-web1:~# ps -ef | grep zabbix
root@zabbix-web1:~# ss -ntl   #10050端口打开

5. zabbix web界面添加被监控主机
在zabbix web管理界面添加上一步安装了zabbix agent的linux主机172.31.7.106

1.png

6. 关联监控模板
在zabbix对主机实现监控,可以通过添加模板或者添加监控项实现对指定的监控目标进行数据采集,通常采用先创建模板,然后再将模板关联至主机的方式,模板关联如下:

6.1 选择模板
选择符合当前主机监控项目的模板,如对linux系统监控可以关联zabbix自带的Template OS Linux模板,如下在搜索框输入linux关键字后会自带匹配符合名称的模板,直接点击即可选择:

2.png

6.2 确认模板选择
添加 -> 更新
3.png

6.3 确认添加主机
4.png

6.4 主机添加完成
需要等待几分钟(具体看模板中监控项的数据采集间隔时间)之后,主机的状态才会变成绿色或者红色,绿色表示zabbix server对zabbix agent有权限进行数据采集并且当前通信正常,红色则表示通信异常,通信异常会有多种原因,具体可以看相关日志或者到时候点击红色方框会有相关报错显示
5.png

6.5 验证主机监控数据
经过一段时间的数据采集后,验证zabbix server是否有刚添加完成主机的监控数据和图形,图形显示如下:
图片6.png

至此,针对linux系统的zabbix安装、添加主机和监控就简单完成了

监控tomcat

学习如何通过java gateway实现对tomcat的指标进行数据采集和图形展示,如堆栈内存利用率、当前会话连接数、繁忙线程等。

hah.png

1. 准备JDK环境

root@zabbix-web1:~# apt install openjdk-8-jdk

2. 准备tomcat

#解压tomcat压缩包
root@zabbix-web1:~# cd /apps/
root@zabbix-web1:/apps# tar xvf apache-tomcat-8.5.65.tar.gz

#创建测试app
root@zabbix-web1:/apps# cd apache-tomcat-8.5.65/
root@zabbix-web1:/apps/apache-tomcat-8.5.65# mkdir webapps/magedu
root@zabbix-web1:/apps/apache-tomcat-8.5.65# vim webapps/magedu/index.html
tomcat web page

#启动tomcat
root@zabbix-web1:/apps/apache-tomcat-8.5.65# /apps/apache-tomcat-8.5.65/bin/catalina.sh start

3. 验证tomcat web页面
确认tomcat服务运行及访问正常

root@zabbix-web1:/apps/apache-tomcat-8.5.65# ss -ntl  #监听在8080和12345端口

#浏览器访问172.31.7.106/magedu/
tomcat web page

4. 部署java gateway服务器
java gateway是一个独立于zabbix server和zabbix agent的组件,也就是java gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent公用一台服务器,前提是端口不要配置冲突了。
本次使用zabbix server的服务器,IP地址为172.31.7.101

root@zabbix-server:~# wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+bionic_all.deb
root@zabbix-server:~# dpkg -i zabbix-release_4.0-3+bionic_all.deb
root@zabbix-server:~# apt update
root@zabbix-server:~# apt install zabbix-java-gateway

# 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=50
TIMEOUT=30

# systemctl restart zabbix-java-gateway
# systemctl enable zabbix-java-gateway

# lsof -i:10052    #验证java gateway端口
COMMAND PID  USER  FD  TYPE  DEVICE  SIZE/OFF  NODE  NAME
Java        3759 zabbix  11u  IPv6  47414   0t0       TCP *:10052 (LISTEN)

或者编译安装java gateway

root@zabbix-server:~# 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
root@zabbix-server:~# ./configure --prefix=/apps/zabbix_server --enable-java --with-net-snmp --with-mysql --with-ssh2
root@zabbix-server:~# make install
root@zabbix-server:~# vim /apps/zabbix_server/sbin/zabbix_java/settings.sh
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/apps/zabbix_server/run/zabbix_java_gateway.pid"
START_POLLERS=5   #启动多少个工作线程处理数据
TIMEOUT=30

root@zabbix-server:~# java -version
openjdk version "1.8.0_292"

root@zabbix-server:~# /apps/zabbix_server/sbin/zabbix_java/startup.sh   #编译安装的java gateway启动方式
root@zabbix-server:~# ss -ntl   #10052端口打开

5. 配置zabbix server调用java gateway

root@zabbix-server:~# /apps/zabbix_server/etc/zabbix_server.conf
JavaGateway=172.31.7.101    #监听地址
JavaGatewayPort=10052      #指定java gateway的服务器监听端口,如果是默认端口可以不写
StartJavaPollers=5   #启动多少个线程去轮训 java gateway
root@zabbix-server:~# systemctl restart zabbix-server

6. 验证Java Pollers

root@zabbix-server:~# ps -ef | grep java

7. tomcat开启JMX监控
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务,通常使用JMX来监控系统的运行状态。
https://www.jianshu.com/p/8c5133cab858

root@zabbix-web1:~# vim /apps/apache-tomcat-8.5.65/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=172.31.7.106"  #tomcat主机自己的IP地址,不要写zabbix服务器的地址

8. 通过jconsole验证JMX数据
在windows安装windows版本的JDK,安装过程略,安装完成之后点击安装目录的jconsole.exe,比如C:\ProgramFiles\Java\jdk1.8.0_221\bin\jconsole.exe,如下:

1.png

9. 非安全连接
2.png

10. 验证连接
连接成功后会显示当前JMX数据
3.png

11. zabbix server添加JMX监控
4.png

12. zabbix server关联模板
添加 -> 更新
5.png

13. 验证当前JMX状态及数据
6.png

验证JMX数据:
7.png

监控MySQL

监控MySQL连接数、主从同步、同步延迟等。

1. 实现MySQL主从
部署mysql 主从同步,需要配置不同的server id并在master开启binlog

1.1 MySQL Master

MySQL 5.7.x:
root@zabbix-mysql-master:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address      =0.0.0.0
server-id=10
log-bin=/var/lib/mysql/master-log
root@zabbix-mysql-master:~# systemctl restart mysql

1.2 MySQL Slave

MySQL 5.7.x:
root@zabbix-mysql-slave:~# apt install mysql-server mysql-client
root@zabbix-mysql-slave:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address      =0.0.0.0
server-id=105
relay-log =/var/lib/mysql/relay-log
root@zabbix-mysql-slave:~# systemctl restart mysql

1.3 MySQL Master授权账户
在mysql master服务器授权账户并导出数据,然后scp到mysql backup服务器。

MySQL Master授权账户:
root@zabbix-mysql-master:~# mysql
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'magedu'@'172.31.%.%' IDENTIFIED BY '123456';
root@zabbix-mysql-master:~# mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql
root@zabbix-mysql-master:~# scp /opt/backup.sql 172.31.7.105:/opt/

1.4 MySQL Slave导入数据
在MySQL Slave服务器导入数据开始同步数据,Position位置在sql文件:

root@zabbix-mysql-slave:~# mysql < /opt/backup.sql
root@zabbix-mysql-slave:~# head -n30 /opt/backup.sql
root@zabbix-mysql-slave:~# mysql
mysql> CHANGE MASTER TO
MASTER_HOST='172.31.7.104',MASTER_USER='magedu',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-log.000002',MASTER_LOG_POS=154;
mysql> start slave;
mysql> show slave status\G;
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

2. Percona监控MySQL
官方文档及下载地址:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html #插件地址

https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/ #安装包下载地址

https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html #installation-instructions #安装教程

2.1 MySQL Slave安装zabbix-agent

root@zabbix-mysql-slave:~# dpkg -i zabbix-release_4.0-3+bionic_all.deb
root@zabbix-mysql-slave:~# apt update
root@zabbix-mysql-slave:~# apt install zabbix-agent
root@zabbix-mysql-slave:~# vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.31.7.101
StartAgents=5
ServerActive=172.31.7.102
Hostname=172.31.7.105
Include=/etc/zabbix/zabbix_agentd.d/*.conf

root@zabbix-mysql-slave:~# systemctl restart zabbix-agent
root@zabbix-mysql-slave:~# systemctl enable zabbix-agent

2.2 MySQL Slave安装Percona
修改zabbix agent启动用户为root,包括zabbix agent配置文件和服务启动文件。

root@zabbix-mysql-slave:~# vim /etc/zabbix/zabbix_agentd.conf
AllowRoot=1
User=root
root@zabbix-mysql-slave:~# systemctl restart zabbix-agent
root@zabbix-mysql-slave:~# vim /lib/systemd/system/zabbix-agent.service
User=root
Group=root
root@zabbix-mysql-slave:~# systemctl deamon-reload
root@zabbix-mysql-slave:~# systemctl restart zabbix-agent

root@zabbix-mysql-slave:~# wget https://downloads.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/debian/artful/x86_64/percona-zabbix-templates_1.1.8-1.artful_all.deb

安装Percona软件包
root@zabbix-mysql-slave:~#dpkg -i percona-zabbix-templates_1.1.8-1.artful_all.deb
root@zabbix-mysql-slave:~#cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
root@zabbix-mysql-slave:~# systemctl restart zabbix-agent

安装php环境: 目前Percona与ubuntu 自带的php 7.2不兼容,需要安装php 5.6版本
root@zabbix-mysql-slave:~# add-apt-repository ppa:ondrej/php
root@zabbix-mysql-slave:~# apt-get -y update
root@zabbix-mysql-slave:~# apt install -y php5.6 php5.6-mysql

创建mysql认证文件:
root@zabbix-mysql-slave:~#
cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf

2.3 zabbix web导入Percona模板

1.png

2.4 zabbbix web添加主机
2.png

2.5 zabbix web对主机关联模板
配置 – 模板 – 监控项 -- 全选 – 批量更新 -- 类型:Zabbix客户端(主动式)" -- 更新间隔:5s (每一页都改一下)
3.png

2.6 验证MySQL监控数据
Percona模板中的监控项默认是五分钟收集一次监控项数据,会结合脚本检查agent上报错数据的文件的时间戳是否超过五分钟,脚本位置在/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh

root@zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.31.7.105 -k MySQL.Key-read-requests
47
4.png

3. 自定义脚本监控MySQL
编写脚本监控MySQL主从同步及延迟

3.1 MySQL slave安装zabbix agent

root@zabbix-mysql-slave:~# apt install zabbix-agent

3.1 脚本内容
mysql_monitor.sh

root@zabbix-mysql-slave:~# vim /etc/zabbix/zabbix_agentd.d/mysql_monitor.sh
#!/bin/bash
Seconds_Behind_Master(){
    NUM=`mysql -uroot -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
    echo $NUM
}

master_slave_check(){
NUM1=`mysql -uroot -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -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-mysql-slave:~# chmod a+x mysql_monitor.sh
root@zabbix-mysql-slave:~# bash mysql_monitor.sh master_slave_check
50

3.2 自定义监控项配置

root@zabbix-mysql-slave:~# /etc/zabbix/zabbix_agentd.conf.d/all.conf
UserParameter=mysql_monitor[*],/bin/bash /etc/zabbix/zabbix_agentd.conf.d/mysql_monitor.sh $1
root@zabbix-mysql-slave:~# systemctl restart zabbix-agent

root@zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.31.7.105 -p 10050 -k "mysql_monitor[master_slave_check]"   #zabbix server测试获取数据
50

3.3 自定义模板
创建模板和MySQL主从同步的监控项、触发器和图形添加过程,其他监控项省略。
3.3.1 创建模板

1.png

3.3.2 添加监控项
添加监控项
2.png

3.png

3.3.3 添加触发器
4.png

5.png

3.3.4 添加图形
6.png

7.png

3.4 模板关联至主机
3.4.1 添加主机
8.png

3.4.2 关联模板
9.png

10.png

3.5 验证监控数据

2、自定义监控项,实现故障邮件通知

自定义监控项

对nginx的活动连接和当前状态等运行状态进行监控

配置示例:
location /nginx_status {
stub_status;
allow 172.31.0.0/16;
allow 127.0.0.1;
deny all;
}

状态页用于输出nginx的基本状态信息:
输出信息示例:
Active connections: 291
server   accepts    handled    requests
16630948  16630948   31070465
上面三个数字分别对应accepts,handled,requests三个值
Reading: 6  Writing: 179  Waiting: 106

Active connections: 当前处于活动状态的客户端连接数,包括连接等待空闲连接数。
accepts:统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:统计总值,Nginx自启动后已经处理完成的客户端请求的总数,通常等于accepts,除非有因
worker_connections限制等被拒绝的连接。
requests:统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数。
Writing:当前状态,正在向客户端发送响应报文过程中的连接数。
Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于 active-(reading+writing)

1. 部署Nginx服务
如果是编译安装需要添加编译参数--with-http_stub_status_module

root@zabbix-web2:/usr/local/src# wget http://nginx.org/download/nginx-1.16.1.tar.gz
root@zabbix-web2:/usr/local/src# tar xf nginx-1.16.1.tar.gz
root@zabbix-web2:/usr/local/src# cd nginx-1.16.1/
root@zabbix-web2:/usr/local/src/nginx-1.16.1# 
./configure --prefix=/apps/nginx --with-http_stub_status_module
root@zabbix-web2:/usr/local/src/nginx.1.16.1# make && make install

root@zabbix-web2:/usr/local/src/nginx.1.16.1# cd /apps/nginx/conf/
root@zabbix-web2:/apps/nginx/conf # vim nginx.conf
location /nginx_status {
stub_status;
#allow 172.31.0.0/16;
#allow 127.0.0.1;
  allow all;
root@zabbix-web2:/apps/nginx/conf # /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@zabbix-web2:/apps/nginx/conf # /apps/nginx/sbin/nginx

#访问172.31.7.107/nginx_status

1.png

2. 监控项脚本

root@zabbix-web2:~# vim /etc/zabbix/zabbix_agentd.d/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

# chmod a+x nginx_status.sh
# bash nginx_status.sh nginx_status 80 active
1

3. zabbix agent添加自定义监控项

root@zabbix-web2:~# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh $1 $2 $3
root@zabbix-web2:~# systemctl restart zabbix-agent

4. zabbix server测试监控项数据

root@zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.31.7.107 -p 10050 -k "nginx_status["nginx_status",80,"active"]"
1

5. 导入Nginx监控模板

2.png

6. 模板关联主机
3.png

7. 验证监控数据
4.png

故障邮件通知

通过企业邮箱、第三方服务商邮箱发送报警邮件通知运维工程师。

1. 邮箱开启SMTP
如果是QQ邮箱需要单独开启SMTP,其他邮箱具体联系服务商。
确认是已经打开状态,如果是未开启状态只要点击开启并根据提示进行相关验证即可。

11.png

2. 生成授权码
QQ邮箱在第三方平台发送邮件不能直接使用QQ邮箱的登录密码,需要使用单独提供的授权码才可以登录,具体生成方式如下:

2.1 生成授权码

22.png

2.2 发送验证码
安装提示使用绑定的手机发送配置邮件客户端到1069070069,然后点击我已发送。
33.png

2.3 保存授权码
44.png

3. Zabbix Web创建报警媒介类型
报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix 的触发器触发一个事件后,怎么才能把这个事件通过某些方式通知给运维工程师呢?那么媒介类型就起到这样的作用,媒介类型创建好之后,需要在每个账户里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,同样的到来,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。
管理 --> 报警媒介类型 --> 创建报警媒介类型
https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=371#设置参考

4. 给用户添加报警媒介

1.png

2.png

3.png

5. 更新报警媒介
4.png

6. 创建动作
动作是对zabbix 触发器触发后生成的事件的具体处理操作,可以是远程执行命令,也可以是发送通知给指定的管理员进行故障处理,发送命令是调用的上一步骤创建好的报警媒介类型。
配置 --> 动作 --> 创建动作
5.png

7. 配置动作信息
6.png

8. 验证动作当前状态
验证当前动作信息,并点击恢复操作,配置故障恢复的具体动作内容
7.png

9. 配置故障恢复信息
8.png

10. 添加动作
9.png

11. 验证动作
将某个被监控的服务手动停止,验证能否收到zabbix 发送的报警通知。

2.12.1 验证事件状态
在zabbix web界面,验证当事件触发后邮件通知有没有发送成功。


10.png

2.12.2 邮箱验证是否收到邮件
到收件箱验证是否收到zabbix 发送的通知邮件


a.png

3、尝试使用zabbix proxy实现跨网段分布式监控

1.png

环境说明
通过搭建zabbix proxy,zabbix server可以远程从zabbix proxy获取到zabbix agent的数据
注意:zabbix proxy的大版本必须要和zabbix server版本一致,否则会导致出现zabbix server与zabbix proxy不兼容问题

zabbix server       公网IP:192.168.1.101
zabbix proxy        公网IP:192.168.1.102     内网IP:172.31.7.102
zabbix agent        内网IP:172.31.7.107
zabbix proxy 的MySQL服务器      内网IP:10.0.0.104

zabbix server apt安装/编译安装 略
1. 编译安装zabbix proxy

root@zabbix-proxy-active:~# useradd zabbix -s /usr/sbin/nologin

root@zabbix-proxy-active:~# pwd
/usr/local/src/zabbix-4.0.15
root@zabbix-proxy-active:~# ./configure --prefix=/apps/zabbix_proxy --enable-proxy -- enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
root@zabbix-proxy-active:~# make install

#在数据库服务器上创建zabbix proxy数据库
root@zabbix-proxy-active:~# mysql
mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix_proxy_active.* to proxy@'172.31.7.%' identified by '123456';

mysql> create database zabbix_proxy_passive character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix_proxy_pasive.* to proxy@'172.31.7.%' identified by '123456';

#主动模式数据库导入
root@zabbix-proxy-active:~# zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uproxy -p123456 -h172.31.7.104 zabbix_proxy_active

#被动模式数据库导入
root@zabbix-proxy-passive:~# pwd
/usr/local/src/zabbix-4.0.15
root@zabbix-proxy-passive:~# mysql -uproxy -p123456 -h172.31.7.104 zabbix_proxy_passive < database/mysql/schema.sql

#zabbix proxy启动service文件
root@zabbix-proxy-active:~# vim /lib/systemd/system/zabbix-proxy.service
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/apps/zabbix_proxy/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/default/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=/apps/zabbix_proxy/sbin/zabbix_proxy -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target

2. 配置主动模式zabbix proxy
配置并使用主动模式(Active Proxy Mode)的zabbix proxy收集zabbix agent监控数据
zabbix proxy主动配置

root@zabbix-proxy-active:~# vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=0  #0为主动,1为被动
Server=192.168.1.101  #zabbix server服务器的地址或主机名
ServerPort=10051
Hostname=magedu-jiege-proxy-active  #代理服务器名称,需要与zabbix server添加代理时候的proxy name是一致的!
ListenPort=10051  #zabbix proxy监听端口
DBHost=172.31.7.104  #数据库服务器地址
DBName=zabbix_proxy_active  #使用的数据库名称
DBUser=proxy  #连接数据库的用户名称
DBPassword=123456  #数据库用户密码
ProxyLocalBuffer=72  #已经提交到zabbix server的数据保留时间
ProxyOfflineBuffer=720  #未提交到zabbix server的时间保留时间
HeartbeatFrequency=60  #心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
ConfigFrequency=60  #间隔多少秒从zabbix server获取监控项信息
DataSenderFrequency=30  #数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
StartPollers=6  #启动的数据采集器数量
StartPollersUnreachable=3  #监控不可达主机的进程
StartTrappers=5
StartPingers=3
JavaGateway=172.31.7.102  #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到数据
JavaGatewayPort=10052  #Javagatewa服务端口
StartJavaPollers=5  #启动多少个线程采集数据
HousekeepingFrequency=1  #多久清理一次数据
CacheSize=16M  #保存监控项而占用的最大内存
StartDBSyncers=4  #启动多少个和数据库同步的进程到数据库读取数据
HistoryCacheSize=16M  #保存监控历史数据占用的最大内存
HistoryIndexCacheSize=128M  #历史索引缓存的大小
Timeout=30  #监控项超时时间,单位为秒
LogSlowQueries=3000  #毫秒,多久的数据库查询会被记录到日志

3. 重启zabbix proxy服务

root@zabbix-proxy-active:~# systemctl restart zabbix-proxy
root@zabbix-proxy-active:~# systemctl enable zabbix-proxy

4. zabbix web添加主动代理
管理 --> agent代理程序 --> 创建代理

1.png

5. zabbix agent使用主动代理
修改或者新添加一台zabbix agent,并使用zabbix 主动模式代理服务器进行监控
使用主动模式proxy:
2.png

3.png

验证当前主机和主动模式proxy 状态:
4.png

6. zabbix agent配置文件(zabbix agent apt安装/编译安装 略)
需要修改zabbix agent中配置文件ServerActive的值为主动模式zabbix proxy

root@zabbix-web:~# vim /etc/zabbix/zabbix_agentd.conf
Server=172.31.7.102
ServerActive=172.31.7.102
root@zabbix-web:~# systemctl restart zabbix-agent

7. zabbix web验证当前主机状态

5.png

8. 验证主机监控数据及图形
6.png

你可能感兴趣的:(zabbix分布式企业级监控系统)