zabbix--学习笔记
zabbix--学习笔记
第一天
1.为什么使用监控?
01-实时状态
02-反馈当前系统状态
03-系统可靠性
04-保障业务稳定性
2.如何监控,比如我们需要监控磁盘 内存 使用率
01 我们首先要知道手动怎么看磁盘 内存指标
02 监控磁盘指标
03 获取数值 报警
[root@centos7mage ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda2 94G 2.3G 91G 3% /
/dev/sda3 47G 33M 47G 1% /data
/dev/sda1 1014M 153M 862M 16% /boot
[root@centos7mage ~]# df -h |awk '{print $5}'
Use%
0%
0%
2%
0%
3%
1%
16%
3.流行的监控工具
01 zabbix
02 Prometheus(适合监控容器)
03 open-falcon(小米开源)
4.面试题:入职一家公司如何入手监控
01 系统层监控:进程 CPU 内存 tcp状态 磁盘I/O 网络 应用
02 应用层监控: nginx tomcat php redis mysql 等监控
03 web监控: 请求时间 响应时间 加载时间
04 硬件监控: 路由器 交换机
05 日志监控: elk
5.web网站打开速度探测
免费工具:www.17ce.com
阿里云web监控
https://cloudmonitor.console.aliyun.com/browser-probe/create/_all
第二天
1.单机时代如何监控
CPU top
内存 free -h
磁盘 df -h
系统负载 uptime
2.zabbix的组件讲解
01 zabbix-server 服务端(守护进程) 作用:客户端收集数据给server端
02 zabbix-agent 客户端 作用:负责数据收集
03 zabbix-proxy 分布式
3.面试题:zabbix如何工作的
zabbix客户端被监控的主机上-负责数据收集-传给zabbix服务端-客户端发送数据--存储到mysql--通过zabbix客户端 -做展示和预警
第三天
zabbix5.0 生产部署实战(php版本必须7.0以上)
2.部署zabbix服务端 客户端
0.zabbix5.0 TLS部署 #官网推荐yum方式部署
#------------------------------zabbix-server部署------------------------------#
#官方地址
https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=nginx
#系统和内核版本
CentOS Linux release 7.6.1810、内核3.10.0-957.el7.x86_64)
#安装zabbix仓库、zabbix软件和数据库,修改仓库配置
rpm -Uvh https://repo.zabbix.com/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
yum clean all && yum install -y zabbix-server-mysql zabbix-agent
yum install -y centos-release-scl #升级gcc
sed -i '11s/enabled=0/enabled=1/' /etc/yum.repos.d/zabbix.repo #开启安装源
yum install -y zabbix-web-mysql-scl
yum install -y zabbix-nginx-conf-scl
yum install -y mariadb-server
#启动数据库
systemctl enable mariadb --now
初始化数据库,并设置密码
mysql_secure_installation
mysql -uroot -p123456 进入数据库
#数据库脚本导入
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
#导入初始架构和数据,系统将提示您输入新创建的密码
use zabbix;
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
#为Zabbix server配置数据库
sed -i 's/# DBPassword=/DBPassword=zabbix/' /etc/zabbix/zabbix_server.conf
#为Zabbix前端配置PHP #必须访问server_name,否则报错403.server_name填IP即可
#一定要修改example.com为自己访问的域名
sed -i 's/#\ listen\ 80;/\ listen\ 80;/' /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
sed -i 's/#\ server_name\ example.com;/\ server_name\ local.zabbix.com;/' /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
sed -i 's/listen.acl_users = apache/listen.acl_users = apache,nginx/' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#修改前端页面访问真实资源目录
sed -i 's@\ root\ /opt/rh/rh-nginx116/root/usr/share/nginx/html;@\ root\ /usr/share/zabbix;@' /etc/opt/rh/rh-nginx116/nginx/nginx.conf
#更改时区亚洲上海
sed -i '$iphp_value[date.timezone] = Asia/Shanghai' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#启动服务并设置开机自启
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
#访问403是server_name设置问题
#默认登录的账号密码
账号:Admin 密码:zabbix #Admin首字母大写,测试修改账号密码都为admin小写
#更改为中文
User settings-->Language-->Chinese(zh_CN) Update更新即可
#------------------------------zabbix-server END------------------------------#
#
#------------------------------zabbix-server配置grafana------------------------------#
3.学习监控服务器主机
安装一个或多个客户端
zabbix-agent c语言写的 独立进程运行
zabbix-agent2 c语言 go语言 一个进程多线程运行 承受高并发
客户端:10.0.1.150
服务端:10.0.1.149
#安装客户端
安装源
rpm -Uvh https://repo.zabbix.com/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
安装客户度:
yum install zabbix-agent2 -y
启动 客户端: systemctl restart zabbix-agent2
systemctl status zabbix-agent2
systemctl enable zabbix-agent2
配置文件重新配置:
cp /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent3.conf
egrep -v "^$|#" zabbix_agent3.conf >zabbix_agent2.conf
客户端配置文件
cd /etc/zabbix/
echo > zabbix_agent2.conf
[root@centos7mage ~]# grep '^[A-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=10.0.1.149
ServerActive=10.0.1.149
Hostname=slb
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
注释(这段别用,用上面的)
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=10.0.1.149 #zabbix服务端ip
ServerActive=10.0.1.149 #zabbix服务端ip
Hostname=slb #客户端名称(任意名称)
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
systemctl restart zabbix-agent2
服务端配置文件
[root@centos7mage zabbix]# cat zabbix_server.conf |grep '^[A-Z]'
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
4.#报错解决
1.防火墙未关闭
2.服务端server.conf配置文件有误
3.客户端agent2.conf配置文件有误
4.服务器是否开启了多个进程
5.客户端是否开启了多个进程(没有开启进程)
6.客户端/服务端重启zabbix服务后要等待一分钟,再看结果
122 # Mandatory: no
123 # Default:
124 DBPassword=zabbix
5.#解决zabbix服务端乱码
yum install wqy-microhei-fonts -y
cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
systemctl restart zabbix-server
6.实现zabbix自定义监控
监控项:自定义监控服务器主机信息
模板:多个监控项和触发器弄到一个模版,方便监控主机调用
动作:报警信息发送给谁
报警类型:钉钉 微信 邮件 电话
触发器:报警提示
图形:监控可视化
报警媒介:报警方式 (脚本 python )
工作需求:
tcp 状态
工作安排监控tcp连接状态
思路
01 取tcp状态值
TIME_WAIT
netstat -ant|awk 'NR>2{print $6}'|grep TIME_WAIT|wc -l
02 编辑配置文件(客户端)
cd /etc/zabbix/zabbix_agent2.d
vim tcp.conf
UserParameter=TIME_WAIT,netstat -ant | awk 'NR>2{print $6}' | grep "TIME_WAIT" | wc -l
UserParameter=LISTEN,netstat -ant | awk 'NR>2{print $6}' | grep "LISTEN" | wc -l
UserParameter=ESTABLISHED,netstat -ant | awk 'NR>2{print $6}' | grep "ESTABLISHED" | wc -l
systemctl restart zabbix-agent2
03 服务端操作
zabbix_get -s 10.0.1.150 -p 10050 -k TIME_WAIT
创建监控项
名称:tcp连接状态
键值:TIME_WAIT
名称:LISTEN连接状态
键值:LISTEN
名称:ESTABLISHED连接状态
键值:ESTABLISHED
创建图形
名称:tcp连接状态
监控项:上面刚刚添加的,选择一下就可以了--应用(可添加一个多个)
04 zabbix 调用这个值
TIME_WAIT 连接请求确认
LISTEN 远方tcp端口连接请求
ESTABLISHED tcp成功建立 开始传输
应用集
触发器
需求2:监控80端口是否正常
思路
01 取值
netstat -tulpn | grep -wc 80
02 编辑配置文件(客户端)
cd /etc/zabbix/zabbix_agent2.d
vim nginx.conf
UserParameter=nginx.port,netstat -tuln| grep -wc 80
systemctl restart zabbix-agent2
03 服务端测试
zabbix_get -s 10.0.1.150 -p 10050 -k nginx.port
04 配置监控项和触发器
名称:nginx状态
键值:nginx.port
7.监控类型讲解(常用)
zabbix客户端 :zabbix被动模式-服务端向客户端要数据 -监控服务器比较多的时候 我们服务端有压力
zabbix客户端(主动模式):客户端把数据发给服务端-监控服务器很多的时候 用这个模式
简单检查:不需要客户端,就检查网络情况
比如 监控ip状态
SNMP:监控网络设备 比如交换机 路由器 防火墙
DMX:监控java
IPMI:监控硬件(风扇 速度 电压 温度)
需求3 要监控主机是否在线
思路
01 监控项结合
名称 :网络宕机
类型 :简单检查
键值 :icmpping
02 触发器
1 正常
0 宕机
03 邮件微信报警
8.自定义模板制作
大白话:就是监控项 图形 触发器 做一个模板 提升工作效率
01 创建主机
创建模板
02
链接模板
9. 报警方式
01 邮件报警 免费(企业邮箱/个人邮箱)
02 微信报警 免费
03 钉钉报警 免费
04 短信报警 收费
05 电话报警 收费
需求5:配置邮件报警
思路
01 个人邮箱 企业邮箱
02 开启邮箱smtp功能 授权码
03 配置发件人
04 配置收件人
05 配置动作 什么时候发邮件
PSOHJFUPVIXBZSBD
smtp.163.com
#邮箱设置
名称
邮件报警
类型
电子邮件
SMTP服务器
smtp.163.com
SMTP服务器端口
465
SMTP HELO
163.com
SMTP电邮
15178374440@163.com
安全链接
无STARTTLS(纯文本通信协议扩展)SSL/TLS
SSL验证对端
SSL验证主机
认证
无用户名和密码
用户名称
15178374440@163.com
PSOHJFUPVIXBZSBD
#群组设置
管理-创建群组--开发组/运维组
管理-用户--zhangfei/lisi(任意设置)--
报警媒介:邮件报警邮件报警 15178374440@163.com 1-7,00:00-24:00 未信警一严灾 已启用
#权限(用户)
超级管理员
用户类型 超级管理员
权限
主机群组 权限
所有组 读写
#报警媒介类型
这里可以是你自己设置的模板,也可以用已经设置过的模板
消息模板
#故障模板
故障{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}
需求6:设置企业微信报警 钉钉报警
思路
01 准备一个企业微信
02 企业微信id 机器人id 密钥信息
03 准备一个python 脚本
04 配置发件人
05 配置收件人
06 动作
实战微信报警
#第一种方法(看企业微信支不支持,有些企业可能不支持,未认证)
01 企业微信(获取)
https://work.weixin.qq.com/wework_admin/frame
02
企业微信id wwe00636342f2932ea
机器人id 1000002
密钥 VJ3dKeQAVvn6dhzilY4DXbHe_UV_qjtaCJSWyjQBqkk
03
#!/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='wwe00636342f2932ea'
appsecret='VJ3dKeQAVvn6dhzilY4DXbHe_UV_qjtaCJSWyjQBqkk'
agentid='1000002'
#获取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']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
需要修改的部分有:
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
脚本的三个参数都是zabbix内置变量,分别为:
报警收件人:{ALERT.SENDTO},
报警标题:{ALERT.SUBJECT},
报警内容:{ALERT.MESSAGE}
查看zabbix服务器脚本存放目录
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
#如果提示:
Traceback (most recent call last):
File "./weixin.py", line 3, in <module>
import requests
ImportError: No module named requests
安装 yum -y install python-requests
测试
python weixin.py NianWenQiang "test" "2"
---------------------------------------------------
#第二种方法 (第一种使用不了,用这个)-----(群聊机器人)
01 在企业群聊中,添加群聊机器人
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a435f73e-73fb-4e59-8a12-a6bc4495076c
02 cd /usr/lib/zabbix/alertscripts
vim wechat.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a435f73e-73fb-4e59-8a12-a6bc4495076c" #这就是先前的webhook地址
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
03 测试
python wechat.py 我要上岸666
04 zabbix页面配置发件人-收件人
名称 微信报警2025
类型 脚本
脚本名称 wechat.py (#与你的zabbix服务器的脚本一样,别乱改)
脚本参数 {ALERT.MESSAGE}
admin用户
报警媒介
类型 微信报警2025
收件人 @all
05 消息模板
#故障模板
故障{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}
06 测试
模拟nginx故障或其他故障,看群聊机器人是否有报警信息
第四天
下载Windowszabbix客户端
https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.1/zabbix_agent2-6.0.1-windows-amd64-openssl.msi
11111111111