一、zabbix概述
1、zabbix重要组件
组件 | 说明 |
---|---|
Zabbix Server | 负责接收Agent发送报告信息的核心组件,所有的配置、数据统计、数据操作都由它组织进行 |
Database storage | 负责存储所有的配置信息以及收集的数据 |
Web interface | 是zabbix的GUI接口,通常情况下与Zabbix Server运行在同一台主机上 |
Pxory | 属于可选组件,常用于分布式监控环境中,代理Server收集部分数据,然后转发到 Server,可以减轻Server的压力 |
Agent | 部署在被监控的主机(客户端)上,负责收集被监控端主机的数据,如CPU、内存、 数据库等数据,然后发送到Server端或Proxy端 |
2、zabbix 进程
进程 | 说明 |
---|---|
zabbix_gentd | 客户端守护进程,此进程用于收集被监控端的数据,如CPU负载、内存、硬盘使用情况等 |
zabbix_get | zabbix工具是单独使用的命令。zabbix_get是在server或者proxy端执行获取远程客户端信息的命令,主要用于排错 |
zabbix_sender | 用于发送数据给sen/印或者proxy,通常用于耗时比较长的检查 |
zabbix_server | zabbix 服务端守护进程。zabbix_agentd、zabbix_getv zabbix_sender、zabbix_proxy、 zabbixjava_gateway的数据最终都是提交到servero数据并不都是主动提交给zabbix_server 的,也有被动提交数据的,即server主动去获取数据 |
zabbix_proxy | zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,需要把收集到的数据主动(或被动)地提交到server上 |
zabbix_java_gateway | 在zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。 它的数据最终会提交到server或者proxy |
3、zabbix监控架构
架构 | 说明 |
---|---|
server-client架构 | 是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理,直接在 zabbix server和zabbix agentd之间进行数据交互,适用于网络比较简单,设备比较少的监控环境 |
master-node-client架构 | 是Zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境。每个node同时也是一个server端,node下面可以接proxy,也可以直接接cliento node有自已 的配置文件和数据库,其要做的是将配置信息和监控数据向master同步。当master发生故障或损坏, node可以保证架构的完整性 |
master-proxy-client架构 | 是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据, 只是将agentd发来的数据暂时存放,而后再提交给servero该架构经常是和master-node-client架构 做比较的架构,一般适用于跨机房、跨网络的中型网络架构的监控 |
二、安装 Zabbix
1、安装 Zabbix
# vim /etc/yum.repos.d/zabbix.repo # 配置阿里源
[zabbix]
name=Zabbix Official Repository - $basearch
#baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
#baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/debuginfo/
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
#baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
# yum clean all
# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
# systemctl start mariadb
# systemctl enable mariadb
3、创建zabbix的数据库
# mysql_secure_installation
# mysql -uroot -p123456
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
# zcat /usr/share/doc/zabbix-server-mysql-4.4.10/create.sql.gz | mysql -uzabbix -pzabbix zabbix # 导入数据库SQL脚本
4、检查和编辑配置文件
# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak
# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.bak
# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1 # 客户端被动等待指定服务器来查询数据
ServerActive=127.0.0.1 # 客户端主动提交数据到指定的服务器
Hostname=linux-server001
UnsafeUserParameters=1 # 允许所有的字符是在用户定义的参数,参数传递(支持自定义脚本)
# systemctl start zabbix-server
# systemctl enable zabbix-server
# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
# systemctl restart httpd
# systemctl enable httpd
5、修改中文乱码
# yum -y install wqy-microhei-fonts
# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
6、安装zabbix web接口
# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.10-1.el7.x86_64.rpm
# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.10
# systemctl start zabbix-agent
# systemctl enable zabbix-agent
打开Zabbix前端安装向导
浏览器打开地址:http://192.168.1.10/zabbix/setup.php
在登录界面输入默认的用户名Admin,密码zabbix即可登录到Zabbix服务器
三、Zabbix基本配置
1、Zabbix用户管理
1、修改Zabbix服务器默认用户Admin的初始密码
2、Zabbix添加被监控设备
1、Zabbix监控网络设备
创建主机群组
添加组名"网络设备"
创建主机
添加主机名称为"R1",在群组中选择"网络设备",移除默认的"agent代理程序的接口 ",添加"SNMP接口 ",并在地址栏中添加交换机的管理地址"192.168.10.110”
添加模板
将宏{$SNMP_COMMUNITY)的可用值修改成与交换机上配置的相同,为"centos"
创建图形
在图形配置界面,"监控项"栏中单击"添加"按钮
2、Zabbix监控Linux服务器
# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.10-1.el7.x86_64.rpm
# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.10 # zabbix主机仍为127.0.0.1
ServerActive=192.168.1.10 # 被监控主机IP
Hostname=web1
# systemctl start zabbix-agent
# systemctl enable zabbix-agent
测试网络连接情况
# yum -y install zabbix-get
# zabbix_get -s 192.168.1.20 -k agent.hostname
web1
在Zabbix服务器上添加主机
添加模板
3、Zabbix监控Windows服务器
将压缩包zabbix_agents_3.2.0.wm.zip解压,客户端程序文件复制至 C:\zabbix,将conf文件中zabbix_agentd.win.conf配置文件同样复制至C:\zabbixo在配置文件中
修改zabbix_agentd.win.conf配置
使用cmd命令行进行安装启动agent,常用参数有:-c,指定配置文件;-i安装;-s启动;-x 停止;-d卸载。
到Zabbix服务器上添加主机
选择模板
3、Zabbix自定义监控项
1、监控httpd进程
# vim /etc/zabbix/zabbix_agentd.d/check_httpd.sh
#!/bin/bash
result=`ps -ef | grep httpd | grep -v grep`
if [ -n "$result" ]
then
echo '1'
else
echo '0'
fi
# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 # 用户自定义的脚本中可以包含特殊字符
设置自定义键值为"check_httpd", 要执行的命令为执行check_httpd. sh这个脚本
# vim /etc/zabbix/zabbix_agentd.d/userparameter_httpd.conf
UserParameter=check_httpd.sh /etc/zabbix/zabbix_scripts/check_httpd.sh
# systemctl restart zabbix-agent
创建监控项
在最新数据中查看是否获取到数据
2、磁盘吞吐量
# vim /etc/zabbix/zabbix_agentd.d/iostat.conf
UserParameter=iostat,iostat |awk '/^sda/{print $2}'
# systemctl restart zabbix-agent
# zabbix_agentd -p | grep iostat
iostat [t|15.99]
四、zabbix-mysql分离
1、数据库主机设置
# yum -y install mariadb-server
# systemctl start mariadb
# mysql_secure_installation
# mysql -uroot -p123456
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zabbix.* to zabbix@'%' identified by '123.com';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
2、zabbix服务器设置
# mysqldump -uroot -p123456 --databases zabbix > `date +%F-%H`_zabbix.sql
# cat 2020-07-04-18_zabbix.sql | mysql -h 192.168.1.30 -uzabbix -p123.com zabbix
# vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.1.30
DBName=zabbix
DBUser=zabbix
DBPassword=123.com
# vim /etc/zabbix/web/zabbix.conf.php
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '192.168.1.30';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123.com';
# systemctl restart zabbix-server httpd
五、zabbix监控报警
1、zabbix邮件报警
用户密码为验证码
2、邮件脚本报警
# systemctl stop postfix
# systemctl disable postfix
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.
# yum -y install mailx
# vim /etc/mail.rc
set from=XXXXXXXX@XX.com
set smtp=smtps://smtp.XX.com:465
set smtp-auth-user=XXXXXXXX@XX.com
set smtp-auth-password=123456
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
# yum -y install dos2unix
# cd /usr/lib/zabbix/alertscripts/
# vim email_notice.sh
#!/bin/bash
#export UTF-8
FILE=/tmp/mail.txt
echo "$3" > $FILE
dos2unix -k $FILE
/bin/mail -s "$2" $1 < $FILE
# chmod +x email_notice.sh
参数添加3个:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}”
3、微信报警
# cd /usr/lib/zabbix/alertscripts/
# vim weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
# chmod 777 weixin.py
# cd /usr/lib/zabbix/alertscripts/
# dos2unix -k weixin.py
dos2unix: converting file weixin.py to Unix format ...
# touch /tmp/weixin.log
# chown zabbix:zabbix /tmp/weixin.log
4、修改邮件通知内容
Problem: {EVENT.NAME}故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
六、zabbix模版监控
1、percona模版监控mysql
# yum -y install php php-mysql
# mkdir -p /data/soft
# cd /data/soft/
# 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
# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
# cd /var/lib/zabbix/percona/scripts/
# vim get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -uroot -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
# vim ss_get_mysql_stats.php
$mysql_user = 'root';
$mysql_pass = '123456';
# cd ../templates/
# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# systemctl restart zabbix-agent
2、模版监控nginx状态
# yum -y install epel-release
# yum -y install nginx
# vim /etc/nginx/nginx.conf
http {
server {
......
location /nginx_status {
stub_status on;
access_log off;
}
......
# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.10-1.el7.x86_64.rpm
Server=192.168.1.10
# systemctl start zabbix-agent
# cd /etc/zabbix/zabbix_agentd.d/
# vim nginx_monitor.sh
#!/bin/bash
NGINX_COMMAND=$1
CACHEFILE="/tmp/nginx_status.txt"
CMD="/usr/bin/curl http://127.0.0.1/nginx_status/"
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE 2>/dev/null
fi
# Check and run the script
TIMEFLM=`stat -c %Y $CACHEFILE`
TIMENOW=`date +%s`
if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE 2>/dev/null
fi
nginx_active(){
grep 'Active' $CACHEFILE| awk '{print $NF}'
exit 0;
}
nginx_reading(){
grep 'Reading' $CACHEFILE| awk '{print $2}'
exit 0;
}
nginx_writing(){
grep 'Writing' $CACHEFILE | awk '{print $4}'
exit 0;
}
nginx_waiting(){
grep 'Waiting' $CACHEFILE| awk '{print $6}'
exit 0;
}
nginx_accepts(){
awk NR==3 $CACHEFILE| awk '{print $1}'
exit 0;
}
nginx_handled(){
awk NR==3 $CACHEFILE| awk '{print $2}'
exit 0;
}
nginx_requests(){
awk NR==3 $CACHEFILE| awk '{print $3}'
exit 0;
}
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;
;;
*)
echo 'Invalid credentials';
exit 2;
esac
# chmod +x nginx_monitor.sh
# vim nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $1
# systemctl restart zabbix-agent
# touch /tmp/nginx_status.txt
# chown zabbix:zabbix /tmp/nginx_status.txt
# systemctl start nginx
zabbix导入zbx_nginx_templates模板文件
七、zabbix自动发现和自动注册
1、自动发现
2、自动注册
八、主动模式和被动模式
默认为被动模式:100个监控项要100个来回,要的时候才返回
主动模式:100个监控项1个回合,将所需要的100个打包,然后一次发过去,发过去之后,客户端全部执行完再一次返回给服务端。
更改为主动模式:
评论区