一. 监控服务的概述
1.zabbix功能
1)实时查看服务状态。
2)可以发送报警信息(邮件 短信 电话 微信)。
3)可以进行数据分析(潜在风险或者对业务部门给出数据建议)—>京东会推荐你经常浏览的商品。
2.实现监控的软件服务
1)zabbix+grafana(更好的展示图形信息)
2)普罗米修斯 (监控容器)
3)nagios(比较老,早期比较火)+cacti(流量监控)
4)小米监控
5)监控宝(百度)
二. 如何搭建监控平台(监控哪些东西?)
监控维度
1)硬件监控:服务器 路由器 交换机 防火墙 [温度 转数]
2)系统监控:CPU 内存 磁盘 网络 进程 TCP连接状态
3)服务监控:nginx php tomcat redis memcache mysql
4)网站监控:响应时间 模拟用户进行登录,继而反应出nginx+php+mysql是否正常,代码是否正常。
5)日志监控:及早发现日志中异常问题
6)安全监控:Firewalld WAF(nginx+lua) 安全宝 牛盾云 安全狗
7)网络监控:smokeping 监控宝 站长工具 多机房
8)业务监控:活动产生多少流量 产生多少注册量 多来多少价值(分析)
三. 系统基础监控命令
功能 | 命令 |
查看系统cpu命令 | w 用户连接数,和平均负载 top 显示详细的cpu使用,用户态(user),系统态(system),空闲(idle) htop 图形化显示top glances(更全面,显示cpu内存磁盘进程等全部信息) |
查看系统内存命令 | free , cat /proc/meminfo |
查看系统硬盘命令 | df -h,cat /proc/mounts |
查看系统进程命令 | top htop ps -ef netstat -ant(tcp状态) |
查看系统启动时间 | uptime |
查看网络信息命令 | ifconfig,route,glances,iftop,nethogs |
查看网络连接命令 | netstat |
查看磁盘读写命令 | iostat/iotop |
查看硬件信息命令 | vmstat |
四. zabbix监控原理图与特性
1.集中式监控与分布式监控原理
zabbix集中式监控:监控主机在统一局域网内
zabbix分布式监控:监控主机分布在各个局域网,甚至不在统一个城市。
区别:
集中式监控是客户端zabbix-agent向服务端zabbix-server发送监控数据
分布式监控是客户端zabbix-proxy统一收集客户端zabbix-agent的监控信息,再转发给zabbix-server。
二.zabbix特点(优势)
2.3 Zabbix的功能特性
Zabbix有常见的商业监控软件所具备的功能,如主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的报表图表绘制、分布式、可扩展能力、API等。
1)数据收集
可用、性能检测。
支持Agent、SNMP(包括Trapping和Polling)、IPMI、JMX、SSH、Telnet等。
自定义的检测。
自定义收集数据的频率。
服务器端/代理段和客户端模式。
2)灵活的触发器
q 可以定义非常灵活的 阀值和多种相关联的条件。
3)高度可定制的警告
发送通知,可定制包括告警级别、动作升级、收件人和媒体类型。
通知可以使用全局宏变量和自定义的变量。
自动处理功能包括远程命令的自动调用和执行。
4)实时的绘图功能
监控项将数据实施绘制在图形上。
5)Web监控能力
Zabbix可以模拟浏览器请求一个网站,并检查返回值和响应时间。
6)多种可视化的展示
可以自定义监控的展示图,将多种监控数据集中展示到一张图中。
网络拓扑图。 自定义Screens和Slide shows可以将多种图形集中展示。
报表功能。
资源使用情况的监控展示。
7)历史数据的存储
数据存储在数据库中。
历史数据的存放周期可配置。
定期删除过期的历史数据。
8)配置非常容易
配置比较简单,只需要以下两步即可。
第一步:添加设备。
第二步:应用模板即可完成监控。
9)可以使用模板
模板可以分组
模板具有可继承性。
10)网络发现
支持自动发现网络设备和服务器(可以通过配置自动发现服务规则实现。)
Agent自动发现
支持自动发现实现动态监控的批量监控(支持自定义)内置的自动发现包括文件系统、网络接口、SNMP OLD,可定制自动发现。
11)快速的访问接口
Web页面基于PHP
远程访问。
日志审计。
12)API功能
应用API功能可以方便地和其他系统结合,包括手机客户端的使用。
13)系统权限
不同的用户展示监控的资源不同。
对用户的身份认证
14)程序特性
用C语言编写,其性能和内存开销非常小。
15)大型环境的支持
利用Zabbix-Proxy方式即可轻松构建远程监控。
1.zabbix为什么采用没有采用更好的LNMP架构而是用了LAMP架构?
首先理解:
LAMP:简单,稳定,不支持高并发 apache调用php插件
LNMP: 性能高,支持高并发,nginx + fastcgi 调用php
这是他们的不同点,zabbix采用了LAMP架构而没有用LNMP架构,是因为根本不需要LNMP架构的高并发特性。而且LAMP架构配置使用非常简单,并且作为监控web可能只有一两个运维打开查看,没什么并发。
2.zabbix中为什么PHP不用开启?
zabbix是采用了LAMP架构,LAMP架构中,首先要理解apache与php的关系,apache是通过调用php的一些模块来使用php的功能,根本没有php这个服务,也无从谈起开启php服务。
3.那php插件在LAMP中哪里发挥作用?
[root@m01 ~]# cat /etc/httpd/conf.modules.d/10-php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so ##这个就是php插件,起到php的作用
</IfModule>
[root@m01 ~]# ll /etc/httpd/modules/libphp5.so
-rwxr-xr-x 1 root root 4588224 Oct 31 2018 /etc/httpd/modules/libphp5.so
libphp5.so就是整个LAMP架构中,php起到的作用。
五.zabbix监控服务部署
1.zabbix服务端部署
第一个历程: 下载安装zabbix yum 源文件
zabbix公司需要下载LTS版本( long time support 长期稳定版)
1)阿里云
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
2) 清华源 zabbix官方源
第二个历程:下载安装zabbix服务相关的软件
LAMP架构: httpd(包含在了zabbix中) + PHP + mariadb + zabbix
zabbix服务程序软件:zabbix-server-mysql(zabbix与mariadb相连接的作用)
zabbix服务web软件:zabbix-web-mysql httpd php
数据库服务软件:mariadb-server
yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server (五个软件缺一不可)
五个服务的作用 | |
zabbix-server-mysql | zabbix-server作为服务端将收集的监控信息传输到数据库 |
zabbix-web-mysql | zabbix-web将数据库中的信息实时显示在web界面上,连接httpd与mysql |
httpd | 展示web界面(因为是yum依赖关系,yum下载时网站站点文件已经有了) |
php | 处理zabbix监控页面的动态处理,从数据库中实时读取数据 <用php-fpm会报错(之前LNMP架构中的php),需要下载php这个依赖软件 |
mariad-server | 有两种,一种是yum依赖下载的数据库,一种是自己下载自己配置zabbix需要的配置 |
第三个历程:个别需要的注意配置
vim /etc/zabbix/zabbix_server.conf
连接数据库的配置
vim /etc/httpd/conf.d/zabbix
php_value date.timezone Asia/Shanghai #时区要一致
第四个历程:编写数据库配
如果数据库不是依赖安装,需手动指定以下配置
systemctl start mariadb.service
进入数据库
mysql -uroot -p123456
创建zabbix数据库,指定字符集(zabbix必须要指定字符集,不然web界面显示)
create database zabbix character set utf8 collate utf8_bin;
创建数据库管理用户
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
或者
grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
在zabbix数据库中导入相应的表信息
zcat /usr/share/doc/zabbix-server-mysql-3.2.11/create.sql.gz | mysql -uzabbix -pzabbix zabbix
#登录
mysql -uroot -p123456
#创建数据库
create database zabbix character set utf8 collate utf8_bin;
#授权
grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
#查询登录用户
select user,host from mysql.user;
#删除用户
drop user ''@'localhost';
#远程测试数据库
mysql -uzabbix -pzabbix -h 172.16.1.61 -e 'select user();'
如果是依赖安装,yum下载时,所用的配置都已经配置好了,只需要启动数据库就可以了
systemctl start mariadb.service
第五个历程:启动zabbix程序相关服务
systemctl start zabbix-server.service httpd mariadb.service zabbix-agent
systemctl enabled zabbix-server.service httpd mariadb.service zabbix-agent
说明:至此zabbix-server命令行操作结束。
第六个历程:登录zabbix服务的web界面,经行初始化配置。(找不到zabbix4.0版本的图了,用了3.2版本的步骤图,没有任何差别)
zabbix安装网址:http://10.0.0.61/zabbix/setup.php
服务端端口号zabbix-server 10051
客户端端口号zabbix-agent 10050
第七个历程:登录zabbix服务web页面
用户名Admin(默认)
密码zabbix
六.配置文件详解详解
服务端配置文件详解
[root@m01 ~]# rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server #zabbix-server服务日志切割
/etc/zabbix/zabbix_server.conf#zabbix-server监控主配置文件,配置zabbix—server与数据库的关联
/usr/lib/systemd/system/zabbix-server.service #systemctl管理
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts #zabbix监控报警脚本 警告 发微信 发邮件
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-4.0.12
/usr/share/doc/zabbix-server-mysql-4.0.12/AUTHORS
/usr/share/doc/zabbix-server-mysql-4.0.12/COPYING
/usr/share/doc/zabbix-server-mysql-4.0.12/ChangeLog
/usr/share/doc/zabbix-server-mysql-4.0.12/NEWS
/usr/share/doc/zabbix-server-mysql-4.0.12/README
/usr/share/doc/zabbix-server-mysql-4.0.12/create.sql.gz #创建zabbix数据库后初始化脚本(在zabbix库中创建 表 字段等用来收集信息)
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix#日志文件
/var/run/zabbix#pid
客户端配置文件详解
[root@m01 ~]# rpm -ql zabbix-agent
/etc/logrotate.d/zabbix-agent#yum特有的日志切割
/etc/zabbix/zabbix_agentd.conf#客户端配置文件
/etc/zabbix/zabbix_agentd.d #扩展配置文件,类似nginx/conf.d/
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf#自定义监控例子
/usr/lib/systemd/system/zabbix-agent.service#systemctl管理
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-4.0.12
/usr/share/doc/zabbix-agent-4.0.12/AUTHORS
/usr/share/doc/zabbix-agent-4.0.12/COPYING
/usr/share/doc/zabbix-agent-4.0.12/ChangeLog
/usr/share/doc/zabbix-agent-4.0.12/NEWS
/usr/share/doc/zabbix-agent-4.0.12/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix
七. zabbix主机,应用集,监控项,触发器配置
应用集,监控项,触发器 | 核心 | |
应用集 | 对多个监控项进行分类(内存类,cpu类,磁盘类等监控项) | |
监控项 | 键值key | web页面收集监控数据(调用客户端定义的键值key) |
触发器 | 设置表达式 | 根据表达式,实现报警提示 |
图形 | 指定数据出图显示 | |
聚合图形 | 将多个图形显示在一块屏幕上 | |
自动发现(高级功能) | 实现监控主机自动添加监控 | |
web检测 (高级功能) | 模拟人访问网站对网站进行监控(查看页面有无出现我要的显示) |
1.配置监控主机
zabbix监控客户端方式 | ||
agent代理程序接口 | 服务端客户端模式 | 最常用 |
SNMP接口 | Simple Network Management Protocal | zabbix监控网络设备 路由器,交换机 |
JMX接口 | 监控java程序(tomcat)推荐使用自定义监控 (agent模式) | |
IPMI | 智能监控平台 | 监控服务器硬件信息:风扇转数,服务器温度(推荐自定义监控) |
2.配置自定义监控项
需求:监控内存使用率情况,低于20%报警
第一个历程:
利用命令获取监控信息
free -m|awk ‘NR==2{print int($7/$2*100)}’
第二个历程:
编写zabbix-agent程序配置文件
[root@m01 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@m01 zabbix_agentd.d]# vim mem.conf
UserParameter=mem.use,free -m|awk 'NR==2{print int($7/$2*100)}' #自定义键值
或者写入zabbix_agentd.conf
[root@m01 zabbix_agentd.d]# vim /etc/zabbix/zabbix_agentd.conf
295 # Default:
296 # UserParameter=
297 UserParameter=mem.use,free -m|awk 'NR==2{print int($7/$2*100)}' ###添加这一行信息
298 ####### LOADABLE MODULES #######
自定义键值:
UserParameter=mysql.version,mysql -v
用户参数(用户自定义键值)
UserParameter=键值名称,命令/脚本/xxxx
第三个历程:
服务端zabbix_get测试
zabbix_get -s 172.16.1.7 -p 10050 -k mem.use
监控项
触发器
表达式:设置触发警告的条件公式(重点)
聚合图形
优雅显示,多个图形显示在一块屏幕上
八. 报警方式
邮件报警
第一个历程:配置邮箱信息,谁来给你发邮件
第二个历程:设置遇到什么级别灾难发送信息
第三个历程:发生灾难级别,查看是否发送邮件
微信报警(zabbix4.0)
第一个历程:创建微信公众号查看企业账号信息
1.申请企业微信公众号
应用创建完之后,会在页面生成这个应用,点击打开
点开这个应用,里面会有生成的AgentID,Secret,收信人账号信息,以及我的企业选项里的企业ID
第二个历程:zabbix_server端配置脚本
将企业信息填写到下面代码中的指定位置
[root@m01 ~]# vim /usr/lib/zabbix/alertscripts/weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: bgx
#date: 2018
#comment: zabbix接入微信报警脚本
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='wxd074861951c67ba6'#企业ID
appsecret='QtraZrI936DZ0jZ3aSWTZ_90hWwVlNhonqMFiPG3ZaU' #Secret号
agentid=1 #Agentid号(应用id)
#获取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) #注意:这是个py脚本,空格或者tab没对齐会出现IndentationError: unexpected indent报错。
将脚本放入zabbix_server指定存放脚本的位置
[root@m01 ~]# vim /usr/lib/zabbix/alertscripts/weixin.py
给脚本执行权限
chmod +x /usr/lib/zabbix/alertscripts/weixin.py
系统中没有python的相关模块requests,需要下载,python的模块需要pip下载
yum install -y python-pip
pip install requests #下载python模块
pip freeze #查看安装好的模块信息
运行脚本测试(如果测试的话,测试完需要删除日志,不然zabbix自动运行时无法向日志写入)
./weixin.py ZhangXianWei 主题 内容 #3个参数:收件人+主题+内容
第三个历程:zabbix报警配置
报警媒介类型
名称自定义即可,类型选择脚本,脚本名称为所写的脚本的名称weixin.py,脚本的三个参数都是zabbix内置变量,分别为:报警收件人:{ALERT.SENDTO},报警标题:{ALERT.SUBJECT},报警内容:{ALERT.MESSAGE},添加完报警媒介类型后勾选启用
设置报警级别及收件人
测试
结束
九.web检测监控(高级功能)
web检测:模拟用户访问网站页面,监控指定的页面,可以给模板配置,也能给主机配置
1.web检测配置
名称:一般写哪台主机的哪套网站
客户端:用什么客户端模拟访问你要监控的网页
用户代理字符串:当客户端中浏览器没有你选择的版本时,可以自己书写,在nginx日志中可以看到
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
名称:写具体那个网页(这个是你监控的网页)
URL:要监控网页的网址
跟随跳转:如果配置网页的话,跟着一起跳转到另外一个页面
要求的字串:监控网页上显示的内容来判断网页是否正常
要求的状态码:200 301 302 都属于正确的状态码.
十.matomo监控PV UV IP
含义 | 如何分析 | ||
PV | page view 页面访问量 | 分析日志访问的uri的个数 | |
ip | 独立的ip数量 | 分析访问日志ip的个数 | |
UV | 独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。 | 分析cooki | |
Session | 会话是指在指定的时间段内在您的网站上发生的一系列互动,所以会话次数是一段时间内用户向您的网站发起的会话(Session)总数量。一次会话会浏览一个或多个页面 |
可以选用三剑客分析,也可以根据matomo分析
部署matomo
matomo配置文件
[root@web1 ~]# vim /etc/nginx/conf.d/pkiwi.conf
server {
listen 80;
server_name pkiwi.oldboy.com;
# client_max_body_size 20M;
location / {
if ($http_user_agent ~ ApacheBench)
{
return 403;
}
root /html/pkiwi;
index index.php index.html;
}
location ~ \.php$ {
root /html/pkiwi;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
include /etc/nginx/fastcgi_params;
}
}
十一.自动发现与自动注册
zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多。
Server:允许谁来向我取值10.0.0.61
ServerActive:我主动向谁汇报10.0.0.61
Hostname:区分每一个agent节点,这里配置什么,web监控的主机就叫什么
Hostmetadata:主机源数据,起到标签的作用,当很多客户端主动向服务端注册时,服务端可以根据这些标签值来向这些主机分发不同的模板,或者还有一个作用:当服务端web得到批量的客户端的请求注册时,web端通过配置规则system.uname这个键值来自动添加所有的请求注册。
Startactive=3
说明:在被动模式下,此参数用于设置控制监听进程可启用的子进程的数量,若监控项较多且采集很频繁,建议加大此数值;若此数值为0,则禁止使用被动模式。另外,一般情况,不建议修改此数值,当且仅当某些监控项无法采集到数据,或数据采集数据有延迟现象时,可调整。第四,启用线程越多,则相对越耗系统资源。
**
1.自动发现
流程:web界面编写配置自动发现–>编写自动发现动作–>配置客户端文件
# 检查:服务端通过执行 zabbix_get -s ip -k system.uname 来判断这个IP是否是agent
# 设备唯一性:如果这个IP地址被发现并且加入了监控,可以根据这个IP避免一直被加入
创建动作
自动发现主机IP:{DISCOVERY.DEVICE.IPADDRESS}
>消息内容
客户端名称: {DISCOVERY.SERVICE.NAME}
客户端端口: {DISCOVERY.SERVICE.PORT}
客户端状态: {DISCOVERY.SERVICE.STATUS}
2.自动注册
流程:配置客户端配置文件–>web端创建自动注册动作
修改客户端配置文件
[root@web03 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.61 #允许谁来向我取值10.0.0.61
ServerActive=172.16.1.71 #主动模式 我主动向谁汇报10.0.0.61
Hostname=lb01 #区分每一个agent节点,这里配置什么,web监控的主机就叫什么 当然主机/etc/hosts要解析
Startactive=3
说明:在被动模式下,此参数用于设置控制监听进程可启用的子进程的数量,若监控项较多且采集很频繁,建议加大此数值;若此数值为0,则禁止使用被动模式。另外,一般情况,不建议修改此数值,当且仅当某些监控项无法采集到数据,或数据采集数据有延迟现象时,可调整。第四,启用线程越多,则相对越耗系统资源。
[root@web03 ~]# systemctl restart zabbix-agent
动作,选择自动注册为事件源,然后单击创建操作
3.主动模式与被动模式
zabbix监控默认是被动模式
主动模式是优于被动模式的
被动模式,100个监控需要100个回合
主动模式,100个监控只需要一个回合
相同的服务器配置(8核 16g),被动模式下只能监控200台服务器,而主动模式可以监控1000台。
被动模式原理:
supported items通信过程
- Server打开一个TCP连接
- Server发送请求需要的监控项
- Agent接收到请求并且响应
- Server处理接收到的数据
- 关闭TCP连接
可以看出zabbix_server服务端 1秒钟只能获得一个监控项,100个监控项就要等大概100秒左右。
主动模式原理:
- Agent打开TCP连接(主动检测变成Agent打开)
- Agent请求监控项检测列表
- Server响应监控项(items)列表
- Agent 处理响应
- 关闭TCP连接
- Agent开始收集数据
- 提交active items数据
- 一次性把所有的监控项以下就手机
主动模式配置
客户端配置文件
[root@nfs01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.61
StartAgents=5
ServerActive=172.16.1.61 !!!!!
Hostname=nfs01 #web自动发现、自动注册后动作里有个操作,添加主机,添加的主机就是这个名字
HostMetadata=system.uname !!!!!
Include=/etc/zabbix/zabbix_agentd.d/*.conf
web页面配置
监控的主机监控项类型必须为Zabbix客户端(主动式)
然后检查,同一时间收到所有的监控项
十二.zabbix_proxy分布式监控
一、zabbix agent主动模式与被动模式的区别
zabbix agent的运行模式有以下两种:
1、被动模式:此模式为zabbix默认的工作模式,由zabbix server 向zabbix agent 发出指令获取数据,zabbix
agent被动地去获取数据并返回给zabbix server,zabbix
server会周期性地向agent索取数据。此模式的最大问题就是会增加zabbix server的工作量,在大量的服务器环境下,zabbix
server不能及时获取到最新的数据。
2、主动模式:即由zabbix agent 主动采集数据并返回给zabbix server,不需要zabbix server 的另行干预,因此使用主动模式能在一定程序上减轻zabbix server的压力。
二.分布式监控部署
环境准备
主机 | IP |
m01 | w外网:10.0.0.61 |
lb03 | 外网:10.0.0.10 内网:172.16.1.10 |
web01 | n内网:172.16.1.7 |
nfs01 | n内网:172.16.1.31 |
zabbix-server配置
[root@m01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e2:4c:71 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.61/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee2:4c71/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:0c:29:e2:4c:7b brd ff:ff:ff:ff:ff:ff
##服务端配置上文已经配置完毕
zabbix-proxy配置
#下载zabbix-proxy代理
yum localinstall zabbix-proxy-mysql-4.0.13- 1.el7.x86_64.rpm
#下载本地数据库,存储收集的数据
yum install -y mariadb-server
[root@lb03 ~]# systemctl start mariadb
#数据库
[root@lb03 ~]# mysql
MariaDB [(none)]> create database zabbix_proxy default charset utf8;
MariaDB [(none)]>grant all on zabbix_proxy.* to "zabbix_proxy"@"localhost" indentified by "zabbix_proxy";
#初始化数据库
[root@lb03 ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.0.13/schema.sql.gz | mysql -uzabbix_proxy -pzabbix_proxy zabbix_proxy
#修改zabbix_proxy配置文件
[root@lb03 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.61
Hostname=bj-proxy #代理服务器的名称,一定要与web界面中的agent代理名称一致!
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=localhost #本地数据库
DBName=zabbix_proxy
DBUser=zabbix_proxy #数据库密码
DBPassword=zabbix_proxy
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
zabbix_agent代理程序
[root@nfs01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.10 #被动的被proxy发现,也可以理解为(web页面设置主机,主动来找这个)
StartAgents=5
ServerActive=172.16.1.10 #可以实现自动注册的功能
Hostname=nfs01 #不详
HostMetadata=system.uname
Include=/etc/zabbix/zabbix_agentd.d/*.conf
web页面检查
十三.zabbix高可用
本文中用到了sshpass免密钥交互,也可以做ssh相互免密钥登录
zabbix server的高可用,我试过在agent配置文件中,使用VIP,发现不能正常监控,于是才有本文。
我的做法agent中的配置文件,Server和ServerActive中分别都配置了两个ip,就是为了保证,zabbix-server01宕机了,还可以把监控数据发往zabbix-server02,由于两个zabbix-server共用一个数据库,肯定不能同时往数据库写数据,于是我想到了使用keepalived来控制zabbix server的开关,做到VIP在哪,那台机器的zabbix server就启动,另外一台关闭,而zabbix的web页面使用VIP去访问
十二. zabbix监控习题
1.监控nginx连接状态
1.
active connections – 此时的并发链接数
server accepts handled requests — 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。
连接与请求的关系
用户访问一次就是一个连接,一个连接打开网页会有多个请求
长链接和短链接
http 1.0 不支持 例如访问百度,需要下载8个文件,也就是8个请求,需要建立8次三次握手,8次四次挥手。在2006年还没有长链接,访问网站页面会非常卡,除了带宽的原因还有一个重要原因就是没有长链接。
http 1.1 支持长链接—8个文件,只需要开始建立一次三次握手,然后下载8个文件,再一次四次挥手.
nginx是长链接
2.取出需要监控的值
[root@web01 ~]# vim /server/scripts/nginx_status.sh
#!/bin/bash
case "$1" in
accept)
curl -s 10.0.0.7/status | awk 'NR==3{print $1}'
;;
active)
curl -s 10.0.0.7/status | awk 'NR==1{print $3}'
;;
read)
curl -s 10.0.0.7/status | awk 'NR==4{print $2}'
;;
write)
curl -s 10.0.0.7/status | awk 'NR==4{print $4}'
;;
waite)
curl -s 10.0.0.7/status | awk 'NR==4{print $6}'
;;
esac
3.zabbix_agent端设置键值
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx.status[*],sh /server/scripts/nginx_status.sh "$1"
4.zabbix web页面设置监控项和图形并且出图显示
2.监控tcp11种状态
1.zabbix_agent书写键值
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_state.conf
UserParameter=tcp_status[*],netstat -ant | grep "tcp " | grep -ic "$1"
[root@web01 ~]systemctl restart zabbix-agent.service
2.web页面设置监控项
3.监控nginx的状态码
[root@web01 ~]# vim /server/scripts/access-log-code.sh
#!/bin/bash
code=$1
t=`date +%d/%b/%Y:%H -d "-1hour"`
log=/var/log/nginx/access.log
sudo awk -vtime=$t -vscode=$code '$4~time && $9==scode {i++}END{print i}' $log
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx.code[*],sh /server/scripts/access-log-code.sh "$1"
2.web设置监控项及出图显示
4.监控php-fpm
1.开启php-fpm监控页面
vim /etc/php-fpm.d/www.conf
217 pm.status_path = /php_status #去掉冒号注释
systemctl restart php-fpm
2.php-fpm的监控页面需要借助nginx来访问
[root@web01 ~]# vim /etc/nginx/nginx.conf
#添加这一段
location ~ /status_php {
root /html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
include /etc/nginx/fastcgi_params;
}
[root@web01 ~]# systemctl restart nginx
3.访问php-fpm监控页面
4.curl命令获取返回值,配合awk,grep等筛选监控的值,客户端配置键值。
5. web界面设置监控项,结束~
十三.zabbix报错总结
问题1:yum安装 zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd php时,报错
[root@web01 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd php
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
#####################过程省略########################################
---> Package OpenIPMI.x86_64 0:2.0.27-1.el7 will be installed
--> Processing Conflict: php71w-common-7.1.30-1.w7.x86_64 conflicts php-common < 7.1
--> Finished Dependency Resolution
Error: php71w-common conflicts with php-common-5.4.16-46.el7.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
产生的原因:
安装zabbbix的服务器安装时和php7.1有冲突:若此机器上已经安装php7.1就安装不上zabbix
之前安装过php,但不是zabbi需要的依赖php71w-common
解决办法:
yum remove php-mysql-5.4 php php-fpm php-common #删除之前安装的php
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd php#重新安装zabbix
问题2:配置zabbix监控,所有软件下载完后,因数据库版本的问题,web页面报错
产生原因: 数据库版本与zabbix不搭
解决办法:进入数据库修改
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> update dbversion set mandatory=4000000;
MariaDB [zabbix]> flush privileges;
问题3:
产生原因:zabbix时区不是中国
解决办法:
vim /etc/httpd/conf.d/zabbixx.conf
20: php_value date.timezone Asia/Shanghai
问题4:zabbix监控web界面显示中文乱码
产生原因:字体不对
解决办法:
问题4:没有权限读取文件,导致无法收集数据
[root@m01 webbench-1.5]# zabbix_get -s 172.16.1.7 -k nginx.code[200]
awk: fatal: cannot open file `/var/log/nginx/access.log' for reading (Permission denied)
问题5:zabbix服务端报错
[root@m01 webbench-1.5]# zabbix_get -s 172.16.1.7 -k ESTABLISHED
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_template.conf
UserParameter=ESTABLISHED,netstat -antp|grep -c 'ESTABLISHED'
产生原因:经过排查后发现脚本中有运行netstat -p这个参数查看进程的命令,因为是zabbix普通用户下执行的 netstat -p命令,所以权限不足。
解决办法:zabbix提权,sudo执行,或者chmod u+s /bin/netstat
问题6:自动发现,添加的主机名是ip地址,不是主机名
产生原因:/etc/hosts没有对ip解析
解决办法:在/etc/hosts中添加ip对应的主机名。
问题7:自动发现配置完后,发现不了主机
产生原因:检查发现,当自动发现主机时,不能执行动作,动作中有一个条件是agent端开机时间小于200s才符合条件,执行动作(发送邮件,分发模板等)
问题8:自动发现中,当动作的操作存在发送消息的操作时,会一直发送消息
产生原因:执行动作的条件没有设置好,到了检测时间,符合要求还会继续执行动作,一直发送信息。
解决办法:还没有好的办法,目前是多加一个条件,判断机器运行超过200s就不符合条件了,就不在执行动作。
但是会有个小坑,当你把检测的主机删除重新自动发现主机时,服务器此时可能运行远远超过200秒了,怎么样都不会检测到。
十四.zabbix面试
1.全网监控项目,作为你简历的一个项目需要数出来。
2. 你是如何实现监控的?哪些地方要监控?你是如何搭建zabbix监控的?
一个监控系统运行的大概的流程是这样的:
zabbix-agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix
server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
监控维度
1)硬件监控:服务器 路由器 交换机 防火墙 以及服务器的温度及转数
2)系统监控:CPU 内存 磁盘 网络 进程 TCP连接状态
3)服务监控:nginx php tomcat redis memcache mysql
4)网站监控:响应时间 模拟用户进行登录 渲染时间
5)日志监控:及早发现日志中异常问题
6)安全监控:Firewalld WAF(nginx+lua) 安全宝 牛盾云 安全狗
7)网络监控:smokeping 监控宝 站长工具 多机房
8)业务监控:活动产生多少流量 产生多少注册量 多来多少价值(分析)
3. zabbix监控与脚本监控有什么区别?
zabbix监控能够大规模的,快捷的,统一的实现监控服务,而且能够显示监控的历史数据而且出图显示更加直观。
脚本监控也有的它的优势,它不合适与大规模的监控比较复杂。功能比较单一。
4. 为什么要使用监控
- 1.对系统不间断实时监控
- 2.实时反馈系统当前状态
- 3.保证服务可靠性安全性
- 4.保证业务持续稳定运行
5. zabbix 怎么开启自定义监控
1、写一个脚本用于获取待监控服务的一些状态信息。
2、在zabbix客户端的配置文件zabbix_agentd.conf中添加上自定义的“UserParameter”,目的是方便zabbix调用我们上面写的那个脚本去获取待监控服务的信息。
3、在zabbix服务端使用zabbix_get测试是否能够通过第二步定义的参数去获取zabbix客户端收集的数据。
4、在zabbix服务端的web界面中新建模板,同时第一步的脚本能够获取什么信息就添加上什么监控项,“键值”设置成前面配置的“UserParameter”的值。
5、数据显示图表,直接新建图形并选择上一步的监控项来生成动态图表即可。
6.zabbix 监控了多少客户端 客户端是怎么进行批量安装的
1、使用命令生成密钥。
2、将公钥发送到所有安装zabbix客户端的主机。
3、安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。
4、创建一个安装zabbix客户端的剧本。
5、执行该剧本。
6、验证。