目录
2.zabbix_gaent(192.168.31.164)
配置Python报警脚本(webserver上192.168.31.163)
赋权 # chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py
测试 ./wechat.py WangHaoYang test cloud (WangHaoYang 为收件人test是标题,内容为cloud)
监控收集信息方式:
被动模式(监控对象上报故障)
优点:占用网络资源少,占用存储资源少
缺点:及时性差
主动模式(定时查看业务状态)
优点:及时性好
缺点:占用资源
一.Zabbix 部署
环境:IP 主机名 角色
192.168.31.163 zabbix_server 监控服务器
192.168.31.164 web1 业务主机
官网:https://www.zabbix.com/documentation/5.0/manual
1.zabbix_server:
安装zabbix
1.设置主机名
hostnamectl set-hostname zabbix_server
防火墙 systemctl stop firewalld systemctl disable firewalld
selinux setenforce 0
2.准备Zabbix-repo(使用阿里提供的源)
[root@zabbix-server ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=alibaba zabbix
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
gpgcheck=0
enabled=1
[zabbix2]
name=alibaba zabbix frontend
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
gpgcheck=0
enabled=1
3.安装Zabbix服务器
# yum clean all
# yum -y install zabbix-server-mysql zabbix-agent (数据库;代理程序(上报信息的程序)
# yum install centos-release-scl (centos发布scl)
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl (zabbix前台页面)
配置数据库
1.安装数据库
# yum -y install mariadb mariadb-server
2.启动数据库
# systemctl enable mariadb
# systemctl start mariadb
3.授权zabbix账号
# mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'why@123';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> flush privileges;
mysql> quit;
4.初始化zabbix(注意版本号的问题)
[root@zabbix-server ~]# ls /usr/share/doc/zabbix-server-mysql-5.0.8/
AUTHORS ChangeLog COPYING create.sql.gz double.sql NEWS README
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.8/create.sql.gz | mysql -uzabbix -p'XuLei@123' zabbix
启动zabbix服务
配置sql账号密码
# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=why@123
启动zabbix
# systemctl enable zabbix-server.service
# systemctl start zabbix-server.service
修改zabbix的PHP配置
# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value date.timezone Asia/Shanghai 默认值,只需要配置时区。
# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
进入浏览器完成第一次配置
欢迎页面
PHP检测
数据库信息
服务器命名
汇总
登录
页面内容
2.zabbix_gaent(192.168.31.164)
设置主机名
hostnamectl set-hostname web1
防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
selinux
setenforce 0
准备zabbix-repo
vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=alibaba zabbix
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
gpgcheck=0
enabled=1
[zabbix2]
name=alibaba zabbix frontend
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
gpgcheck=0
enabled=1
安装zabbix-agent
yum -y install zabbix-agent
配置主服务器地址
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.31.163 #被动模式 zabbix-server-ip
ServerActive=192.168.31.163 #主动模式 zabbix-server-ip(谁从我这里采集数据。
Hostname=web1
启动zabbix-agent:10050
systemctl start zabbix-agent
systemctl enable zabbix-agent
ss -anlp |grep :10050
3命令行测试(zabbix_get)
zabbix-server(192.168.31.163)
# yum -y install zabbix_get
# zabbix_get -s 192.168.100.20 -k system.uname
# zabbix_get -s 192.168.100.20 -k system.cpu.load[all,avg15]
二.Apache监控示例(图形监控)
创建主机组 (zabbix-server-192.168.31.163)
创建主机
创建模板
创建图形
查看图形
三.模板Template
常用模板
Template App HTTP Service
Template App MySQL
Template OS Linux
应用集app 通常是监控项目的归类。比如CPU类,内存类,网卡类,系统类
监控项item 通常是具体的监控参数。比如内存的总大小,剩余空间,使用空间等。
四.Zabbix Items
1.Items 监控项
• 获取监控数据方式
zabbix-agent
SNMP-简单的网际管理协议
• 取值的数据类型/单位
磁盘容量单位一般为B(记住)
网卡流量单位为bps
MySQL每秒select,insert,每秒访问量 qps
CPU
Interrupts per second ips 每秒的中断总数。
user time float %
Context switches per second sps 每秒上下文切换 进程线程切换
Host boot time unixtime 系统启动的时间
• 监控Key(组合命令)
• 获取数据的间隔(1s/1m)
• 历史数据保存的时间
• 趋势数据保存的时间
新建items
1.监控项:服务器启动分区剩余空间
语法 key vfs.fs.size[fs,<mode>]
说明
vfs.fs.size[fs,<mode>] Calculate disk space for a given volume. Disk space in KB. If mode is missing total is used. In case of mounted volume, unused disk space for local file system is returned.
示例 vfs.fs.size[/,free]
图示
新增模板
添加监控项
查看项
新增图形
关联主机和模板
查看图形
2.监控项:服务器网络接口进出流量
创建监控项
创建图形
查看图形
聚合图形
五.zabbix用户自定义监控项
用户自定义key值
注意:mysql安装在被监测主机
测试mysqld询问次数
root@web1 ~]# yum -y install mariadb-server mariadb
root@web1 ~]# systemctl start mariadb
root@web1 ~]# mysqladmin status | awk '{print $6}'
root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql_question,mysqladmin status | awk '{print $6}'
[root@web1 ~]# zabbix_agentd -t mysql_question
mysql_question [t|494]
[root@web1 ~]# systemctl restart zabbix-agent.service
到网页中添加监控项
六.Zabbix Trigger
触发器用于定义item的报警阈值
1.触发器对象(可以应用给主机,也可应用给模板)
触发器表达式
模板:KSY:函数=VALUE
{<server>:<key>.<function>(<parameter>)}<operation><constant>
2.触发器示例
A.CPU负载超过0.5
{temp_cloud__why:system.cpu.load[all,avg1].last(#1)}>0.5
触发器
配置监控项
配置触发器
配置完成后
{temp_cloud__why:system.cpu.load[all,avg1].last(#1)}>0.5
测试
2.流量触发器
七.zabbix ACTION
1.邮箱通知
163授权码
TMFXCUQVFJLTXQIW
MBEBOMTUSZTPRVOE
zabbix客户端
测试成功
添加用户群组
创建用户及报警类型
创建报警动作
操作
动作已添加
制造触发条件
dd if=/dev/zero of=/1.txt bs=1M count=3000
如果无法发送邮件需要配置变量
Trigger: {TRIGGER.NAME}
Trigger status {TRIGGER.STATUS}
1. {ITEM.NAME1}({HOST.NAME1}:{ITEM.KEY1}):{ITEM.VALUE1}
邮件信息
2.微信告警
手机端下载企业微信并注册
在电脑浏览器打开企业微信登录
添加机器人
复制企业ID: ww0cd92dea4a06369a
AgentId 1000002
Secret rjKdxP304rFk6qnysIwB1Jg6980kTCdynpP8S94n2M0
配置Python报警脚本(webserver上192.168.31.163)
# vim /usr/lib/zabbix/alertscripts/wechat.py
self.__corpid =企业微信ID
self.__secret =Secret
agentid (AgentId 1000002)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
class WeChat(object):
__token_id = ''
# init attribute
def __init__(self,url):
self.__url = url.rstrip('/')
self.__corpid = 'ww0cd92dea4a06369a'
self.__secret = 'rjKdxP304rFk6qnysIwB1Jg6980kTCdynpP8S94n2M0'
# Get TokenID
def authID(self):
params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
data = urllib.urlencode(params)
content = self.getToken(data)
try:
self.__token_id = content['access_token']
# print content['access_token']
except KeyError:
raise KeyError
# Establish a connection
def getToken(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'gettoken?'
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content
# Get sendmessage url
def postData(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,'reason'):
print 'reason',e.reason
elif hasattr(e,'code'):
print 'code',e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content
# send message
def sendMessage(self,touser,message):
self.authID()
data = json.dumps({
'touser':touser,
'toparty':1,
'msgtype':"text",
'agentid':"1000002",
'text':{
'content':message
},
'safe':"0"
},ensure_ascii=False)
response = self.postData(data)
print response
if __name__ == '__main__':
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
a.sendMessage(sys.argv[1],sys.argv[3])
赋权 # chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py
# chmod +x /usr/lib/zabbix/alertscripts/wechat.py
测试 ./wechat.py WangHaoYang test cloud (WangHaoYang 为收件人test是标题,内容为cloud)
在网页zabbix上
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
测试
添加报警
配置动作创建动作
Trigger: {TRIGGER.NAME}
Trigger status {TRIGGER.STATUS}
1. {ITEM.NAME1}({HOST.NAME1}:{ITEM.KEY1}):{ITEM.VALUE1}
模拟环境
# dd if=/dev/zero of=/1.txt bs=1M count=3000
3远程执行
当问题发生,可以通过远程执行命令的方式对目标主机进行控制。
开启zabbix远程执行的功能
# vim /etc/zabbix/zabbix_agentd.conf
# systemctl restart zabbix-agent
开启sudo权限
# visudo 添加上权限
zabbix ALL=NOPASSWD: /usr/bin/systemctl restart httpd
模拟HTTP服务出错
在机器上关闭HTTP服务,自动解决
八.zabbix内置宏
九.zabbix自动发现
为了满足监控企业成千上万台服务器,因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。
1、创建自动发现规则
2、创建自动发现动作
3、在“检测中”->“自动发现”可以查看 已发现的设备
十.zabbix自动注册
由客户端主动发起,客户端必须安装并启动Agentd,否则无法被自动注册添加至主机列表。
1.zabbix agent配置
# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=192.168.31.163 主动模式 zabbix-server-ip
# service zabbix-agentd restart
2.zabbix server配置
1、创建自动注册动作
2、在“配置”->“主机”中查看注册的设备信息
实战案例: 监控 TCP连接 1
1.agent:
准备自定义key
# Format: UserParameter=<key>,<shell command>
root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
UserParameter=tcp.status.listen,ss -an |grep :80 | grep -i 'LISTEN' |wc -l
UserParameter=tcp.status.timewait,ss -an |grep :80 | grep -i 'TIME-WAIT' |wc -l
UserParameter=tcp.status.established,ss -an |grep :80 | grep -i 'ESTAB' |wc -l
UserParameter=tcp.status.syn_recv,ss -an |grep :80 | grep -i 'SYN_RECV' |wc -l
UserParameter=tcp.status.syn_sent,ss -an |grep :80 | grep -i 'SYN_SENT' |wc -l
UserParameter=tcp.status.close,ss -an |grep :80 | grep -i 'CLOSE' |wc -l
2.server:
[root@localhost ~]# zabbix_get -s 192.168.31.164 -k tcp.status.close
0
[root@localhost ~]# zabbix_get -s 192.168.31.164 -k tcp.status.listen
1
实战案例: 监控 TCP连接 2
agent:
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
UserParameter=tcp.status[*],ss -an |grep :80 | grep -i "$1" |wc -l
server:
使用[传参]来调用
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[TIME-WAIT]
34
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[LISTEN]
1
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[CLOSE]
0
实战案例: 监控 TCP连接 3
agent:
1 下载自定义key的包
已上传至阿里云盘
zabbix-example
chmod -R +x zabbix-example/
chown -R zabbix zabbix-example
2 拷贝命令文件至zabbix目录。
mkdir /etc/zabbix/tcp_connect.status
cp zabbix-example/tcp_connect_status/tcp_connect_status.sh /etc/zabbix/tcp_connect.status/
#!/bin/bash
#ESTABLISHED/LISTEN/SYN_SENT/SYN_RECV/FIN_WAIT1/FIN_WAIT2/TIME_WAIT/CLOSE/CLOSE_WAIT/LAST_ACK/LISTEN/CLOSING/ERROR_STATUS
LISTEN() {
netstat -an |grep ^tcp |grep LISTEN |wc -l
}
ESTABLISHED() {
netstat -an |grep ^tcp |grep ESTABLISHED |wc -l
}
TIME_WAIT() {
netstat -an |grep ^tcp |grep TIME_WAIT |wc -l
}
SYN_SENT() {
netstat -an |grep ^tcp |grep SYN_SENT |wc -l
}
SYN_RECV() {
netstat -an |grep ^tcp |grep SYN_RECV |wc -l
}
CLOSE() {
netstat -an |grep ^tcp |grep CLOSE |wc -l
}
$1
3 增加用户自定义KEY
cp zabbix-example/tcp_connect_status/tcp_connect_status /etc/zabbix/zabbix_agentd.d/tcp_connect_status.conf
4 重启服务
systemctl restart zabbix-agent.service
server:
使用[传参]来调用
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[TIME-WAIT]
34
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[LISTEN]
1
[root@localhost ~]# zabbix_get -s 192.168.100.20 -k tcp.status[CLOSE]
0