前置:关闭防火墙、永久关闭seLinux、时间同步
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
永久关闭seLinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled //将enforcing的修改成disabled
重启后getenforce验证修改情况
安装chrony服务,设置时间同步
[root@localhost ~]# yum -y install chrony #如果没有该服务安装一下
[root@localhost ~]# systemctl enable chronyd --now #设置 chronyd 开机启动并立即启动chronyd服务同步网络时间
[root@localhost ~]# date验证
一、安装MySQL8.0(RPM)
cd /data/zabbix/mysql
下载MySQL源
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
配置MySQL源
yum -y install mysql80-community-release-el7-5.noarch.rpm
安装MySQL相关依赖(--nogpgcheck跳过GPG验证)
yum -y install gcc-c++ mysql-devel net-snmp-devel libevent-devel mariadb-devel --nogpgcheck
#下载MySQL
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
#创建MySQL目录
mkdir /data/zabbix/mysql
解压MySQL安装包
tar xf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar -C /data/zabbix/mysql
移动到mysql目录
cd /data/zabbix/mysql
RPM方式安装MySQL
rpm -ivh mysql-community-* --force --nodeps
验证是否被安装
rpm -qa |grep mysql(共16个)
启动MySQL
systemctl start mysqld &&systemctl enable mysqld
systemctl daemon-reload(重新加载systemd配置文件,如果启动不成功的话)
#查看mysql临时密码
cat /var/log/mysqld.log | grep password
mysql -uroot -p
输入查看到的密码
修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'sagk@5gadpG$Q';
#创建zabbix库
create database zabbix character set utf8 collate utf8_bin;
#创建zabbix用户(二选一)
create user zabbix@localhost identified by 'sagk@5gadpG$Q';
授权
grant all privileges on zabbix.* to zabbix@localhost;
#生效
FLUSH PRIVILEGES;
#如果需要新建不限ip登录的用户(二选一)
CREATE USER 'zabbix'@'%' IDENTIFIED BY 'sagk@5gadpG$Q';
#赋权
GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%';
#生效
FLUSH PRIVILEGES;
二、安装zabbix
cd /data/zabbix/
#下载zabbix6.0
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.1.tar.gz
解压zabbix
tar -zxvf zabbix-6.0.1.tar.gz -C /data/zabbix/
#创建zabbix组
groupadd zabbix
#创建zabbix用户
useradd -g zabbix -M -s /sbin/nologin zabbix
cd /data/zabbix/zabbix-6.0.1
#编译(我这边指定安装在/data/zabbix/目录下)
./configure --prefix=/data/zabbix/ --enable-server --enable-agent --with-net-snmp --with-mysql
#编译安装
make install
三、安装 PHP
1. 由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php74
yum -y install php php-bcmath php-gd php-xml php-mbstring php-mysqlnd php-ldap
yum -y install curl-devl libxml2 libxml2-devel
2. 需要修改php参数(网页预配置必要条件)
vim /etc/php.ini
修改post_max_size为16M
修改max_execution_time为300
修改max_input_time为300
四、安装httpd
mkdir -p /var/www/html
#创建软链接(因为之前安装在/data/zabbix/需要做一下软连接,不然后面zabbix api地址找不到)
ln -s /data/zabbix/zabbix-6.0.1/ui /var/www/html/zabbix
安装httpd
yum -y install httpd
修改httpd配置文件
vim /etc/httpd/conf/httpd.conf
改
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
为:
DocumentRoot "/var/www/html/zabbix"
<Directory "/var/www/html/zabbix">
AllowOverride All
Require all granted
</Directory>
最终zabbix的api地址(配置grafana用到):http://IP地址/api_jsonrpc.php或者http://IP地址/zabbix/api_jsonrpc.php
五、导入数据库架构及数据
给/data/zabbix/zabbix-6.0.1/database/mysql/目录下文件权限(一般已经有权限,可检查跳过)
确保 MySQL 有足够的权限读取指定路径下的images.sql文件
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
chown -R mysql:mysql /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
chmod 644 /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
进入MySQL
mysql -uroot -p
进入zabbix用户
USE zabbix
导入数据库架构及数据
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/schema.sql
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/images.sql
SOURCE /data/zabbix/zabbix-6.0.1/database/mysql/data.sql
查看表
SHOW TABLES;
如果能看到一系列表名,说明文件已成功导入。
六、配置zabbix_server文件数据库密码
vim /data/zabbix/etc/zabbix_server.conf
#DBPassword= 修改为MySQL的zabbix用户密码
DBPassword=*******(zabbix用户密码)
七、启动zabbix-server,httpd
service httpd start && systemctl enable httpd.service
cd /data/zabbix/sbin/ && ./zabbix_server
八、进入zabbix控制面板
IP地址进入zabbix控制面板
配置DB连接
输入zabbix密码
setting
自定义zabbix主机名称
(账号Admin 密码zabbix)
下载配置文件(如需会提示)
保存为 "/data/zabbix/zabbix-6.0.1/ui/conf/zabbix.conf.php"
修改时区
vim /etc/php.ini
date.timezone = Asia/Shanghai
systemctl restart httpd
九、安装zabbix agent(也可以使用ansible脚本一键多台服务器同时安装配置)
移除旧的zabbix仓库配置文件
rm -f /etc/yum.repos.d/zabbix*.repo
安装zabbix仓库
yum install -y --nogpgcheck https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
查找zabbix_agentd.conf文件路径并编辑
find / -name "zabbix_agentd.conf"
vim /data/zabbix/etc/zabbix_agentd.conf
Server=127.0.0.1(改控制主机的地址)
ServerActive=127.0.0.1(改控制主机的地址)
Hostname=your_hostname(改控制主机的主机名)
启动zabbix-agent并开机自启
systemctl start zabbix-agent && systemctl enable zabbix-agent
ansible脚本一键多台服务器同时安装zabbix-agent并配置:
---
- name: 安装 Zabbix Agent
hosts: IP地址,英文逗号分隔
become: true
tasks:
- name: 移除旧的 Zabbix 仓库配置文件
file:
path: /etc/yum.repos.d/zabbix*.repo
state: absent
- name: 安装 Zabbix 仓库
yum:
name: https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
state: present
disable_gpg_check: true # 如果 GPG 校验有问题,可以临时禁用
- name: 修改zabbix.repo文件中zabbix-non-supported仓库的enabled参数
replace:
path: /etc/yum.repos.d/zabbix.repo
regexp: '^enabled=1$'
replace: 'enabled=0'
after: '\[zabbix-non-supported\]'
- name: 安装 Zabbix Agent
yum:
name: zabbix-agent
state: present
disable_gpg_check: true # 如果 GPG 校验有问题,可以临时禁用
- name: 查找 zabbix_agentd.conf 文件
find:
paths:
- /etc/zabbix
- /etc
patterns: zabbix_agentd.conf
register: zabbix_conf_result
- name: 显示配置文件路径
debug:
var: zabbix_conf_result.files[0].path
- name: 修改 Server 配置
lineinfile:
path: "{{ zabbix_conf_result.files[0].path }}"
regexp: '^Server='
line: 'Server=#zabbix主机IP'
state: present
- name: 修改 ServerActive 配置
lineinfile:
path: "{{ zabbix_conf_result.files[0].path }}"
regexp: '^ServerActive='
line: 'ServerActive=#zabbix主机IP'
state: present
- name: 修改 Hostname 配置
lineinfile:
path: "{{ zabbix_conf_result.files[0].path }}"
regexp: '^Hostname='
line: 'Hostname=#zabbix主机名'
state: present
- name: 启动 Zabbix Agent 服务
systemd:
name: zabbix-agent
state: started
enabled: true
十、zabbix监控数据汉化
find / -type d -name "fonts"
找到路径
/data/zabbix/zabbix-6.0.1/ui/assets/fonts
将汉化包simkai.ttf传进去目录
find / -name "defines.inc.php"
vim /data/zabbix/zabbix-6.0.1/ui/include/defines.inc.php
修改defines.inc.php文件,设置默认语言为中文
vim /data/zabbix/zabbix-6.0.1/ui/include/defines.inc.php
改82行
define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); // font file name
为
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
改127行
define('ZBX_FONT_NAME', 'DejaVuSans');
为
define('ZBX_FONT_NAME', 'simkai');
保存退出
systemctl restart httpd.service
重启httpd服务
十一、grafana安装
wget https://dl.grafana.com/oss/release/grafana-9.5.2-1.x86_64.rpm
yum localinstall grafana-9.5.2-1.x86_64.rpm -y
systemctl start grafana-server.service && systemctl enable grafana-server.service
systemctl daemon-reload(重新加载systemd配置文件,如果启动不成功的话)
用户名:admin 密码:admin
第一次登录会让你更改密码
十二、grafana添加zabbix插件
下载zabbix插件(推荐)
wget -P /data/zabbix/grafana http://example.com/alexanderzobnin-zabbix-app-4.5.1.linux_amd64.zip
将alexanderzobnin-zabbix-app-4.5.1.linux_amd64.zip包放进来并解压到/var/lib/grafana/plugins/
cd /data/zabbix/grafana && unzip alexanderzobnin-zabbix-app-4.5.1.linux_amd64.zip -d /var/lib/grafana/plugins/
重启grafana
systemctl restart grafana-server
或者在线安装
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server
十三、启用 grafana 中新安装的 zabbix 插件
grafana访问地址:IP地址:3000
配置zabbix步骤
插件找到zabbix,然后启用
然后数据源找到zabbix进行配置:
zabbix API 地 址 :http://IP地址/api_jsonrpc.php
zabbix用户及密码(区分大小写):Admin zabbix
十四、grafana汉化
vim /etc/grafana/grafana.ini
末尾添加
[default]
language = zh-Hans
登录 Grafana
进入 用户设置(Profile)
选择 Language -> 简体中文 (zh-Hans)
十五、添加监控主机
先在目标主机进行上述步骤九后
控制面板添加主机
目标主机名
群组:Linux servers
模板:Templates/Operating systems ---- Linux by Zabbix agent
Interfaces(客户端):目标主机ip
systemctl restart grafana-server
十六、grafana将图标监控项设置为主机名
1、进入编辑模式,选择你的监控面板。
2、在 右侧 “Overrides” 选项卡,点击 “Add field override”
3、选择 “Fields with name”,然后选中 CPU utilization (监控项)相关的字段
4、选择“Add override property”,选中“Standard options >Display name”
5、输入${__field.labels.host}即可
十七、自定义配置监控项并grafana展示图表
监控在线人数
在被监控主机上vim /etc/zabbix/zabbix_agentd.conf
末尾添加
UserParameter=game1001,echo $(( ($(ss -t -a state established | grep 7051 | wc -l) / 2) + ($(ss -t -a state established | grep 7052 | wc -l) / 2) ))
UserParameter=game1002,echo $(( ($(ss -t -a state established | grep 7151 | wc -l) / 2) + ($(ss -t -a state established | grep 7152 | wc -l) / 2) ))
UserParameter=game1003,echo $(( ($(ss -t -a state established | grep 7251 | wc -l) / 2) + ($(ss -t -a state established | grep 7252 | wc -l) / 2) ))
在被监控主机上验证
zabbix_agentd -t game1001
返回game1001 [t|15]
说明在线人数15人
zabbix控制面板添加监控项
配置–主机–对应主机监控项–创建监控项
名称:game1001在线人数
键值:game1001
更新间隔、数据保留时间自定义,添加即可,可以去检测–最新数据–选择对应主机对应监控项看图表数据是否成功
grafana图表更新
创建仪表板–Group:linux server–host:f8-game–Item tag:留空–Item:game1001在线人数
十八、配置自动发现
1、配置自动发现规则
配置->自动发现->创建发现规则
名称:自定义(自动发现Linux服务器)
IP范围:输入需要添加的服务器IP地址
更新间隔:5s(自动发现完后停用自动发现即可)
检查:添加->检查类型:Zabbix客户端->端口范围:10050->键值:system.uname
在zabbix服务器里面验证:zabbix_get -s IP地址 -p 10050 -kpeiz system.uname
设备唯一性准则:IP地址
主机名称:DNS名称
可见的名称:主机名称
已启用:勾选
添加即可
2、配置动作
如果需要配置邮件告知的话,需要添加动作Discovery actions
配置->动作->Discovery actions->创建动作
名称:动作-自动发现Linux服务器
条件:类型:主机IP地址->操作者:等于->值:IP地址或范围
添加完成后在动作右边有个操作选项
3、配置操作
操作:添加1(可选)->操作类型:发送消息->Send to users添加:Admin
仅送到:163邮件报警
Custom message:勾选
主题:自动发现主机: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}
消息:
发现规则: {DISCOVERY.RULE.NAME}
设备 IP:{DISCOVERY.DEVICE.IPADDRESS}
设备 DNS: {DISCOVERY.DEVICE.DNS}
设备状态: {DISCOVERY.DEVICE.STATUS}
设备运行时间: {DISCOVERY.DEVICE.UPTIME}
设备服务端口: {DISCOVERY.SERVICE.NAME}
再添加2
操作:添加->操作类型:添加到主机群组->主机群组:Discovered hosts
再添加3
操作:添加->操作类型:与模板关联->模板:Templates/Operating systems下的Linux by Zabbix agent
再添加4
操作:添加->操作类型:添加主机
确定即可
4、验证
在新服务器上执行上述九、安装zabbix agent步骤,等待两分钟左右验证是否加入集群,有添加即可
十九、配置163邮件告警
1、登录163邮件->找到设置下的POP3/SMTP/IMAP->客户端授权密码->开启或重置新增授权密码,拿到授权码和POP3/SMTP/IMAP服务器链接
2、zabbix->管理->报警媒介类型->创建媒介类型
名称:163邮件报警
类型:电子邮件
SMTP服务器:smtp.163.com
SMTP服务器端口:25
SMTP HELO:163.com
SMTP电邮:邮箱号例如198*****@163.com
安全链接:无
认证:用户名和密码
用户名称:邮箱号例如198*****@163
密码:163拿的授权密码
Message format:HTML
添加再点击进行测试
收件人:邮箱号(自己的)
主题消息自定义->提示Media type test successful即可
3、给zabbix用户添加报警邮箱
管理->用户->Admin->报警媒介->添加
类型:163邮件报警
收件人:邮箱号例如198*****@163.com
当启用时:1-7,00:00-24:00
如果存在严重性则使用:全勾选
已启用:勾选
添加再点击更新
4、创建报警动作
配置->动作->Trigger actions->创建动作
名称:动作-发送报警邮件
在动作右边有个操作选项
操作:
默认操作步骤持续时间:1h
暂停操作以制止问题:勾选
操作->添加->操作类型:发送消息->步骤:1-1->步骤持续时间:0->Send to users添加Admin->仅送到:163邮件报警->主题:故障{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}
Add
注:TRIGGER.SEVERITY 触发严重性; severity [sɪ’verəti]严重程度;
恢复操作:添加->操作类型:发送消息->Send to users添加Admin->仅送到:163邮件报警->Custom message:勾选->主题:已恢复!{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}
Add后添加即可
5、测试,有条件的可以将其中被控制的主机进行关机,验证是否成功有邮件信息发过来,有就完成了。
二十、配置钉钉告警
#钉钉告警用python脚本来实现,所以需要安装python
下载python安装包
cd /data/python
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
解压在当前目录
tar xvf Python-3.6.8.tgz
安装依赖包
yum -y install vim unzip net-tools && yum -y install wget && yum -y install bzip2 && yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel && yum -y install libglvnd-glx && yum -y install gcc gcc-c++
完成后进入cd /data/python/Python-3.6.8目录
#指定python3安装路径:
./configure --prefix=/data/python/Python-3.6.8
#编译+安装
make && make install
#添加python3软链接:(python --version查看版本,有了不用加也阔以)
ln -s /data/python/Python-3.6.8/bin/python3.6 /usr/bin/python3
#添加pip3软链接:
ln -s /data/python/Python-3.6.8/bin/pip3 /usr/bin/pip3
钉钉创建群
添加自定义机器人->机器人名字:zabbix机器人->安全设置->自定义关键词:zabbix、告警、报警、恢复->完成->拿到机器人的Webhook链接
添加python脚本
find / -type d -name "alertscripts"找到zabbix的/data/zabbix/share/zabbix/alertscripts/目录
在/data/zabbix/share/zabbix/alertscripts/目录下创建python脚本
vim /data/zabbix/share/zabbix/alertscripts/dingding.py(脚本内容如下)
新建日志存放文件
mkdir -p /data/zabbix/share/zabbix/alertscripts/log && touch /data/zabbix/share/zabbix/alertscripts/log/dingding.log
#修改脚本的属主和属组:
[root@zabbix alertscripts]# chown zabbix.zabbix -R /data/zabbix/share/zabbix/alertscripts/
#为脚本添加执行权限
[root@zabbix alertscripts]# chmod +x dingding.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import datetime
webhook = "https://oapi.dingtalk.com/robot/send?access_token=2cecf54bc0f16087adea9d8ac03ac3d659e78aa371a07aa18d93dcf553e0b"
#主题内容
subject = sys.argv[1]
text = sys.argv[2]
data = {
"msgtype": "text",
"text": {
"content": "%s\n%s" % (subject, text)
},
"at": {
"atMobiles": [], # 不指定具体的用户手机号码
"isAtAll": True # 设置为 @ 所有人
}
}
headers = {'Content-Type': 'application/json'}
x = requests.post(url=webhook, data=json.dumps(data), headers=headers)
log_path = "/data/zabbix/share/zabbix/alertscripts/log/dingding.log"
if os.path.exists(log_path):
f = open(log_path, "a+")
else:
f = open(log_path, "w+")
f.write("\n" + "--" * 30)
if x.json()["errcode"] == 0:
f.write("\n" + str(datetime.datetime.now()) + " " + "发送成功" + "\n" + str(text))
f.close()
else:
f.write("\n" + str(datetime.datetime.now()) + " " + "发送失败" + "\n" + str(text))
f.close()
脚本内容绑定钉钉机器人链接,然后指定日志存放位置
python脚本修改webhook的链接和修改log_path的日志文件路径
#测试py脚本 主题 内容
./dingding.py 告警 test
钉钉群可以返回信息之后可以去zabbix添加任务了
钉钉告警zabbix客户端添加如下内容
1、zabbix->管理->报警媒介类型->创建媒介类型
名称:钉钉告警
类型:脚本
脚本参数:添加两个,分别是{ALERT.SUBJECT}和{ALERT.MESSAGE},其中{ALERT.SUBJECT}是标题,{ALERT.MESSAGE}是告警内容参数,因为脚本需要入参
添加
2、给zabbix用户添加钉钉告警
管理->用户->Admin->报警媒介->添加
类型:钉钉告警
收件人:@all
当启用时:1-7,00:00-24:00
如果存在严重性则使用:全勾选
已启用:勾选
添加再点击更新
3、创建报警动作
配置->动作->Trigger actions->创建动作
名称:钉钉告警
条件:添加->类型:触发器名称->操作者:包含->值:{HOST.NAME}: Data.dll进程数告警
在动作右边有个操作选项
操作:
默认操作步骤持续时间:1h
操作->添加->操作类型:发送消息->步骤:1-1->步骤持续时间:0->Send to users添加Admin->仅送到:钉钉告警->主题:服务器:{HOST.NAME}发生: {TRIGGER.NAME}!
->消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
Add
注:TRIGGER.SEVERITY 触发严重性; severity [sɪ’verəti]严重程度;
恢复操作:添加->操作类型:发送消息->Send to users添加Admin->仅送到:钉钉告警->Custom message:勾选->主题:服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
->消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
Add后添加即可
4、将监控进程的触发器改一下条件验证一波是否成功告警