1.1 Zabbix监控框架
- zabbix监控模式:
cs client server服务端和客户端模式
- zabbix监控原理:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图
1.2 多维度的监控体系
- 应用程序层(app)
页面反映出 nginx + php + mysql 是否正常 代码是否正常
nginx+php phpinfo();
- 服务层
各种程序 nginx mysql php tomcat
xxx端口
进程
服务内置方法
:nginx:stub_statusredis
- 系统层
cpu
:ps aux;top;htop;vmstat;iostat;sar;/proc/cpuinfo;lscpu内存
: free -h;ps aux;htop;top;jmap -heap pid;磁盘 磁盘i
o: df -h; du -sh;iotop -o;vmstat;iostat;网络带宽
: iftop;nethogs;ping;nc;telnet;nmap负载
: top;w;uptime
- 物理硬件
温度 ipmitool
风扇转速 ipmitool
raid卡状态 megacli
网络设备 流量
监控宝/听云/smokeping
- 基于osi7层模型和用户访问网站流程监控
1.3 zabbix安装部署
-
m01 zabbix-server 服务端
#m01 配置zabbix yum源 root@m01 files]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm [root@m01 files]# sed -i 's#http://repo.zabbix.com/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/#g' /etc/yum.repos.d/zabbix.repo [root@m01 files]# yum -y install php zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd mariadb-server zabbix-get #创建zabbix数据库及管理用户 create database zabbix default charset utf8; MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';Query OK, 0 rows affected (0.00 sec) #编辑server配置文件 [root@m01 ~]# grep -n '^DB' /etc/zabbix/zabbix_server.conf 91:DBHost=localhost 100:DBName=zabbix 116:DBUser=zabbix 124:DBPassword=zabbix #zabbix数据导入数据库 zcat /usr/share/doc/zabbix-server-mysql-4.0.14/create.sql.gz |mysql zabbix #启动服务 systemctl enable httpd.service zabbix-server.service zabbix-agent.service mariadb #访问网站 http://10.0.0.61/zabbix/ #修改时区 [root@oldboy-m01 ~]# grep -n Asia/etc/httpd/conf.d/zabbix.conf 20:php_value date.timezone Asia/Shanghai [root@oldboy-m01 ~]# systemctl restart httpd #默认用户名密码 : Admin 和zabbix
-
web01 zabbix-agent 客户端
#客户端只需安装zabbix-agent [root@web01 ~]# grep ^Server= /etc/zabbix/zabbix_agentd.conf Server=172.16.1.71 #启动服务 [root@web01 ~]# systemctl start zabbix-agent
1.4 web页面操作
#从客户端直接获取数据测试
[root@oldboy-m01 ~]# zabbix_get -s 172.16.1.7 -p 10050 -kagent.version
4.0.13
[root@oldboy-m01 ~]# zabbix_get -s 172.16.1.7 -p 10050 -kagent.ping
1
- 配置主机信息
zabbix监控客户端方式 | 含义 | 应用场景 |
---|---|---|
agent模式 | 服务端客户端模式 | 最常用 |
SNMP | SNMPSimple NetworkManagement Protocal简单网络管理协议 | zabbix监控网络设备 路由器 交换机(需要支持SNMP) |
JMX | 监控java程序 (tomcat)推荐使用自定义监控(agent模式) | |
IPMI | 监控服务器硬件信息 :温度 风扇转速 |
1.5 图形显示中文乱码
[root@ZabbixServer ~]# cd /usr/share/fonts/dejavu/
[root@ZabbixServer dejavu]# mv DejaVuSans.ttfDejaVuSans.ttf.bak
#进入windows电脑,C盘->windows->fonts->随便复制字体至桌面
[root@ZabbixServer dejavu]# rz #上传了simhei.ttf #原有格式不是ttf也ok ttc
[root@ZabbixServer dejavu]# mv simhei.ttf DejaVuSans.ttf
1.6 zabbix自定义监控 模板
- 在linux下面只要能使用命令取出来的内容 都可以自定义监控.
- 客户端
1.在客户端操作 自定义监控项
2.通过命令获取到你要的内容
3.配置键值(key)
4.修改zabbix客户端配置文件
- 服务端
1在服务端测试:zabbix_get
2.在web页面进行点点点
3.创建模板 Template
4.应用集 Applications: 监控项进行分类: 系统 cpu
5.监控项item:(获取数据) zabbix web页面与自定义键值 关联起来
6.触发器 Trigger:什么时候报警
7.图形 Graph :图形展示
1.7 nginx状态:stub_status;
-
nginx准备
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; #include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. #include /etc/nginx/default.d/*.conf; location / { } location /status { stub_status; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } } [root@web01 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok [root@web01 ~]# nginx [root@web01 ~]# curl 172.16.1.7/status Active connections: 1 server accepts handled requests 2 2 2 Reading: 0 Writing: 1 Waiting: 0
-
定义key
#zabbix自定义监控使用脚本 及 参数传递 [root@web01 ~]# cat /server/scripts/nginx.sh #!/bin/bash case "$1" in active) curl -s 172.16.1.7/status |awk 'NR==1{print $3}' ;; read) curl -s 172.16.1.7/status |awk 'NR==4{print $2}' ;; write) curl -s 172.16.1.7/status |awk 'NR==4{print $4}' ;; wait) curl -s 172.16.1.7/status |awk 'NR==4{print $6}' ;; esac #编辑配置文件 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf UserParameter=nginx.status[*],/bin/sh /server/scripts/nginx.sh "$1"
-
zabbix服务端测试
[root@oldboy-m01 ~]# zabbix_get -s 172.16.1.7 -k nginx.status[accept] 149275
-
web页面点点点
修改模板–>应用集–>监控项–>触发器–>图形
1.8 聚合图形及拓扑图
1.9 触发器表达式
- 故障表达式及恢复表达式 自定义触发器中
2.0 报警
-
邮件报警
-
微信报警
#上传weixin.py脚本 [root@oldboy-m01 ~]# cd /usr/lib/zabbix/alertscripts [root@oldboy-m01 /usr/lib/zabbix/alertscripts]# ll -rw-r--r-- 1 root root 1352 Jan 10 2019 weixin.py #安装requests模块 [root@oldboy-m01 /usr/lib/zabbix/alertscripts]# python weixin.py Traceback (most recent call last): File "weixin.py", line 7, in <module> #安装pip yum install -y python-pip #pip查看安装后软件的信息 [root@oldboy-m01 /usr/lib/zabbix/alertscripts]# pip showrequests
#根据企业微信填写
[root@zabbix alertscripts]# egrep -n '^(corpid|appsecret|agentid)' weixin.py
19:corpid='ww8ef1be1e0258a527'
20:appsecret='nhhS0UoE6hsZusCGJ0Xr6nlam68W7-3gKmCPlED_deo'
21:agentid=1000002
#给脚本添加执行权限
[root@oldboy-m01 /usr/lib/zabbix/alertscripts]# chmod +xweixin.py
#web页面微信发件人配置
{ALERT.SENDTO} 报警收件人
{ALERT.SUBJECT} 报警标题
{ALERT.MESSAGE} 报警内容
#模拟报警进行测试
[root@zabbix alertscripts]# python weixin.py "YuHongLei" "server" "guale"
2.1 web监测
- 模拟用户 访问网站页面 监控指定的页面.
2.2 网站pv ip uv (pwiki matomo)
2.3 对于批量大量服务器监控
- 自动发现 discovery
zabbix服务端定期扫描指定的网段 把主机添加进来
- 优点:配置简单 缺点:服务器压力较大
-
自动注册 atuoregister
[root@web03 ~]# vim /etc/zabbix/zabbix_agentd.conf Server=172.16.1.61 # ServerActive=172.16.1.61 #主动模式 使用的服务端ip #Hostname=nfs01 #客户端主机名 解析 ping HostnameItem=system.hostname #获取客户端主机名 主机名解析 [root@lb01 ~]# systemctl restart zabbix-agent.service
###补充:
[root@lb01 ~]# grep '^HostMetadataItem' /etc/zabbix/zabbix_agentd.conf
HostMetadataItem=system.uname #主机元数据 来源来自于key
2.4 客户端 主动与被动模式
- 客户端的被动模式 :
server向agent请求获取监控项的数据,agent返回数据
- 客户端的主动模式:
agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
2.5 proxy zabbix分布式监控
#配置yum源
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/#g' /etc/yum.repos.d/zabbix.repo
#安装zabbix-proxy及数据库
yum -y install zabbix-proxy-mysql mariadb-server
#开机自启
systemctl enable mariadb.service zabbix-proxy
#配置数据库
mysql
create database zabbix_proxy default charset utf8;
grant all on zabbix_proxy.* to zabbix@'localhost' identified by 'zabbix';
#初始化数据库
zcat /usr/share/doc/zabbix-proxy-mysql-4.0.14/schema.sql.gz |mysql -uzabbix -pzabbix zabbix_proxy
#修改proxy配置文件
sed -i.ori '162a DBPassword=zabbix' /etc/zabbix/zabbix_proxy.conf
sed -i 's#Server=127.0.0.1#Server=172.16.1.71#' /etc/zabbix/zabbix_proxy.conf
sed -i 's#Hostname=Zabbix proxy#Hostname=proxy-web01#' /etc/zabbix/zabbix_proxy.conf
systemctl start zabbix-proxy.service mariadb-server
#修改agent配置文件\
[root@web01 ~]# grep '^Server' /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.7
ServerActive=172.16.1.7
3. 钉钉报警
[root@zabbix ~]#cat /usr/lib/zabbix/alertscripts/dingding.py
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=041160204c02c587f130aed5ed5e9f09d3ea57edd00272ee439b73dee7d07394" #说明:这里改为自己创建的机器人的webhook的值
user=sys.argv[1]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/local/zabbix/log/dingding.log"):
f=open("/usr/local/zabbix/log/dingding.log","a+")
else:
f=open("/usr/local/zabbix/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))
f.close()
说明:手都测试脚本
./dingding.py 标题 手机号 内容
4. 低级自动发现
查看已有规则 键值
[root@oldboy-zabbix-server ~]# zabbix_get -s 127.0.0.1 -k vfs.fs.discovery |python -m json.tool
低级自动发现规则 取出网卡名称
[root@oldboy-zabbix-server ~]# zabbix_get -s 127.0.0.1 -k net.if.discovery |jq .
-
低级自动发现难点: 取出的key是json格式.
-
低级自动发现 mysql多实例的端口 然后监控
#MySQL 多实例的 脚本 输出json格式 ok 自定义key 并测试 给zabbix低级自动发现 发现端口 json Web页面配置 低级自动发现规则 添加 监控项原型 需要key (可以是zabbix 内置 或 自定义 ) 测试 关联主机 模板 #MySQL 多实例的 脚本 输出json格式 ok #!/bin/bash #oldboyedu.com #mysql low-level discovery res=`netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'` port=($res) printf '{' printf '"data":[' for key in ${!port[@]} do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then printf '{' printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}," else [[ "${key}" -eq "((${#port[@]}-1))" ]] printf '{' printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}" fi done printf ']' printf '}\n' # 测试 自定义发下规则里面的 key # 然后根据key获取 内容 3306 3307 # 监控3306 # 监控3307 状态 修改 mysql_userparameter.conf status ping ##自定义key 给zabbix低级自动发现 发现端口 json [root@oldboy-zabbix-server ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf UserParameter=mysql.port.discovery,sh /server/scripts/mysql_port.sh [root@oldboy-zabbix-server ~]# systemctl restart zabbix-agent.service [root@oldboy-zabbix-server ~]# zabbix_get -s 127.0.0.1 -k mysql.port.discovery web页面 低级自动发现规则
添加 监控项原型 需要key (可以是zabbix 内置 或 自定义 )
[root@oldboy-zabbix-server ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status
where Variable_name='$1';" | HOME=/var/lib/zabbix mysql - uzabbix -p123456 -P "$2" -N -S /var/lib/mysql/mysql.sock 2>/dev/null| awk '{print $$2}' ping | grep -c alive
[root@oldboy-zabbix-server ~]# systemctl restart zabbix-agent.service
[root@oldboy-zabbix-server ~]# zabbix_get -s 127.0.0.1 -k mysql.status[uptime,3306]
web 添加 监控项原型
进行检查与测试
zabbix_get -s 127.0.0.1 -k net.if.discovery|python -m json.tool
5. Grafana可视化工具
wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm
yum localinstall -y grafana-6.5.2-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
浏览器访问: IP:3000
查看插件
grafana-cli plugins list-remote
有问题就看日志
官方模板地址:https://grafana.com/grafana/dashboards
重要参数有:
Type: Zabbix
Url: http://192.168.4.47/zabbix/api_jsonrpc.php
Username: Admin(
默认)
Password: zabbix
(默认)
6. zabbix优化
1. 针对mysql,写多读少mariadb 5.5 innodb升级mysql 5.7 tokudb
innodb myisam tokudb 存储引擎(Linux 文件系统)
2. 去掉无用监控项
3. 增加监控项的取值间隔
4. 减少历史数据保存周期 增加趋势数据时间
5. 把客户端被动模式修改为主动模式, 避免zabbix-proxy
6. 针对于zabbix-server缓存调优,谁的剩余内存少,就加大它的缓存值 CacheSize