5.0版本官网安装步骤
https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&components=server_frontend_agent&db=mysql&ws=nginx
卸载zabbix
先停止服务
systemctl stop zabbix-server zabbix-agent rh-php72-php-fpm
查找zabbix所有的服务
rpm -qa | grep -i zabbix
会查找到多个服务,依次删除
yum -y remove zabbix-agent-5.0.25-1.el7.x86_64
yum -y remove zabbix-web-mysql-scl-5.0.25-1.el7.noarch
.....
删除zabbix所有的配置以及相关文件
find / -name zabbix
全部删除,例如
rm -rf /etc/selinux/targeted/active/modules/100/zabbix
rm -rf /etc/zabbix
rm -rf /var/lib/yum/repos/x86_64/7/zabbix
需要更干净一点的话,可以利用模糊搜索
find / -name "*zabbix*"
把显示出来的全部删除
yum安装zabbix5.0
1.关闭selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
grep "SELINUX=disabled" /etc/selinux/config
setenforce 0
getenforce
2.安装必备的软件
yum install lrzsz dos2unix bash-completion nmap telnet tree wget vim net-tools ntpdate salt-minion git -y
3.配置软件的安装源
(1)配置阿里的yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
(2)配置阿里的epel源:
yum install epel-release
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
(3)设置yum和epel源的缓存:
yum clean all
yum makecache
4.修改字符集(可选)
localectl set-locale LANG=zh_CN.UTF-8
source /etc/locale.conf
5.配置zabbix5.0的yum源
安装阿里云的zabbix镜像源:
安装源:
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
启用 zabbix 前端源,修改/etc/yum.repos.d/zabbix.repo,将[zabbix-frontend]下的 enabled 改为 1:
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1 (这里修改为1)
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
清除yum源之前的缓存:
yum clean all
6.安装zabbix-server、zabbix-agent、zabbix-get
yum install zabbix-server-mysql zabbix-agent zabbix-get -y
7.安装 Software Collections
便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4 过低
yum install centos-release-scl -y
8.安装 zabbix 前端和相关环境
这里可以不安装nginx,用服务器的nginx,不过为了获取nginx配置,可以安装,后面不启动便是
yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl -y
如果服务器已有nginx这一步可以不安装nginx,后面我会贴出nginx的配置
yum install zabbix-web-mysql-scl -y
9.创建配置初始数据库
mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'zabbix';(设置一个密码)
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码,导入需要一些时间
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
导入结束后
mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
vim /etc/zabbix/zabbix_server.conf
找到DBPassword配置 解开注释并设置密码
DBPassword=zabbix (设置的密码)
10.配置php前端
编辑配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
找到listen.acl_users = apache 在后面加上nginx
listen.acl_users = apache,nginx
修改时区
; php_value[date.timezone] = Europe/Riga (把这一行设置前的;去掉,并把时区改为Asia/Shanghai)
配置nginx
nginx配置文件位置 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
将这两行的注释取消(80端口可以更换未其它,防止冲突)
# listen 80;
# server_name example.com;
不安装 zabbix自带的nginx 使用服务器已有的nginx,添加配置
安装完成后访问前端可视化页面的端口就是你在这里配置的端口
nginx配置
防止端口冲突,这里我用了90端口
server {
listen 90;
server_name example.com;
root /usr/share/zabbix;
index index.php;
location = /favicon.ico {
log_not_found off;
}
location / {
try_files $uri $uri/ =404;
}
location /assets {
access_log off;
expires 10d;
}
location ~ /\.ht {
deny all;
}
location ~ /(api\/|conf[^\.]|include|locale|vendor) {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock;
# fastcgi_pass unix:/var/opt/rh/rh-php73/run/php-fpm/zabbix.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
11.启动Zabbix server和agent进程
启动并设置开机自启
安装了zabbix自带的nginx
systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
和服务器使用同一个nginx的时候
systemctl restart zabbix-server zabbix-agent rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent rh-php72-php-fpm
启动后
查看zabbix服务状态
systemctl status zabbix-server
查看zabbix运行日志
tailf /var/log/zabbix/zabbix_server.log
可能遇到的问题
zabbix server报错
查看日志,可能报错
using configuration file: /etc/zabbix/zabbix_server.conf
connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
是因为mysql.sock文件的位置没有设置,解决办法
在系统中查找mysql.sock文件
find / -name mysql.sock
结果:
/tmp/mysql.sock
修改/etc/zabbix/zabbix_server.conf 配置
vim /etc/zabbix/zabbix_server.conf
找到DBSocket,解开注释并设置
DBSocket=/tmp/mysql.sock
php报错
查看日志
systemctl status rh-php72-php-fpm.service
错误信息
[pool zabbix] cannot get uid for user 'nginx': Success (0)
解决办法,添加nginx用户
useradd nginx
再次启动,查看状态,成功无报错
访问前端页面报502错误
查看nginx日志发现提示权限不足
我自己的问题是:用宝塔面板安装Nginx时,宝塔在nginx.conf配置文件中设置了
改为 root root 或者root nginx 都可以解决
访问zabbix 配置web
第一次访问需要配置 ip:端口号/setup.php
下一步
这里是检查一下组件,没什么问题,下一步
这里是填写数据库信息,Database host 默认是localhost ,如果不行的话,试试127.0.0.1
password 就是之前安装zabbix时设置的密码
name随便起
下一步
设置完成,点击Finish
登录,默认用户名是 Admin A是大写,密码是zabbix 全小写
设置中文界面,点击左侧 User settings,在Language中选择 zh_CN
初始配置完成,再次访问时:
地址是 ip:端口号 就可进入此页面
使用中文页面,在查看数据的时候可能会有乱码问题
解决乱码问题
下载字体
yum -y install wqy-microhei-fonts
覆盖字体
\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
zabbix添加自定义监控
zabbix的拓展配置都在 /etc/zabbix/zabbix_agentd.d/ 目录下
如果是客户端使用的是agent2版本,目录是/etc/zabbix/zabbix_agent2.d/
案例:使用zabbix监控 服务器登录用户数量
查看服务器登录用户数量的命令
who | wc -l
在 /etc/zabbix/zabbix_agentd.d/ 目录下创建自定义配置文件
cd /etc/zabbix/zabbix_agentd.d/
vim userparameter_login.conf
写入以下内容
UserParameter=login.user,who|wc -l
语法解释:UserParameter=<key名>,<要执行的命令或者脚本>
添加完成重启agent
systemctl restart zabbix-agent.service
systemctl status zabbix-agent.service
测试是否生效
zabbix_get -s '127.0.0.1' -p 10050 -k 'login.user'
返回当前在线人数,当agent和server在同一台机器上 需要使用’127.0.0.1’,
如果agent是另外一台机器,则需要将’127.0.0.1’替换成ip地址 端口号默认10050 无需更改
创建自定义监控模板
创建模版
点击左侧配置->模版->右上角创建模板->设置名称->选择群组->添加
创建应用集
找到创建好的模版,点击模版->创建应用集->设置名称->点击添加
创建监控项,自定义要监控的内容
点击创建监控项->命名->输入建值(自定义的key值,login.user)->在应用集选择框内选择刚才创建的应用集->描述->添加
创建触发器,当监控项获取到值的时候和触发器进行比较,判断是否报警
创建触发器->设置名称->设置问题严重性->添加表达式->选择监控项->功能选择last->结果按需选择,本次案例选择>2
表达式
创建图形这里不就不创建了,
将具体的主机和该模板关联
点击左侧配置->选择主机->选择要关联的主机->点击左上角模板->链接新模板,选择创建好的自定义模板
到此已完成自定义模版的配置,测试打开3个服务器窗口
成功发出了警告!!
zabbix设置邮件报警
配置发件邮箱
在左侧菜单中点击管理,然后点击报警媒介类型,再点击Email,进入发件人配置,根据自己的情况进行配置,最后不要忘了点击更新
设置收件邮箱
用户设置->报警媒介->填写收件人信息->更新
启用邮件发送
配置->动作->启用发送消息给用户群组
不要忘了点更新
最后应用,完成发送邮件警告配置
同样测试登录3个用户
成功发送邮件
接收到的警告邮件
zabbix设置微信报警
需要提前准备好的数据
企业微信AgentId,企业微信Secret,企业id,部门id,要通知的微信账号xxxxxx
首先登录企业微信管理后台,创建一个测试用的应用
创建完成,查看Agentid 和Secret
查看部门id,没有部门的可以自己创建一个部门测试
查看要通知的微信账号
查看企业Id
以上数据复制保存一下,后面要用
微信报警Python脚本
默认yum安装的zabbix脚本目录是 /usr/lib/zabbix/alertscripts
查看脚本存放位置命令:
egrep -v '^$|^#' /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts #这个目录存放报警脚本.如果位置不对,请移动到正确位置
在该目录下新建weixin.py 脚本参考:
#!/usr/bin/python
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys
import simplejson
reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
# print gettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
print e.code
print e.read().decode("utf8")
sys.exit()
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,subject,content):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
send_values = {
"touser":'MaYanPeng', #通知微信用户帐号
"toparty":"2", #部门id。
"msgtype":"text",
"agentid":"1000002", #Agentid。
"text":{
"content":subject + '\n' + content
},
"safe":"0"
}
# send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
print(send_data)
send_request = urllib2.Request(send_url, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':
user = str(sys.argv[1])
subject = str(sys.argv[2])
content = str(sys.argv[3])
corpid = '你的企业id' #企业ID
corpsecret = '你的应用secret' #secret
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
脚本创建完后,要进行授权
chmod -R 777 /usr/lib/zabbix/alertscripts 设置目标文件夹和所包含的文件有所有权限
配置报警媒介
三个参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
设置一下消息模版,默认是和邮件那样的英文,这里改为中文模板
问题模版
主题: 服务器:{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}
问题恢复模版
主题: 服务器:{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}
测试一下我们的脚本是否可以正常工作
我这里提示 找不到模块 simplejson
安装simplejson
pip install simplejson
这里还有一点忘记说了,还需要在企业微信中设置一个ip白名单,否则无法调用微信的api
再次测试,成功接收到了消息
继续配置
经过测试.这里的收件人填微信账号或者agentid都可以
和之前的邮件报警一样,我们在服务器登录3个用户,触发报警
成功发送了微信报警
退出一个用户,问题恢复通知