一. 监控服务的概述

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.集中式监控与分布式监控原理

grafana网站模板 grafana定制自己的页面_超详细

grafana网站模板 grafana定制自己的页面_php_02

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官方源

grafana网站模板 grafana定制自己的页面_zabbix_03

第二个历程:下载安装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

grafana网站模板 grafana定制自己的页面_php_04

grafana网站模板 grafana定制自己的页面_grafana网站模板_05

grafana网站模板 grafana定制自己的页面_php_06

grafana网站模板 grafana定制自己的页面_grafana网站模板_07

grafana网站模板 grafana定制自己的页面_mysql_08

服务端端口号zabbix-server 10051

客户端端口号zabbix-agent 10050

第七个历程:登录zabbix服务web页面

用户名Admin(默认)

密码zabbix

grafana网站模板 grafana定制自己的页面_php_09

六.配置文件详解详解

服务端配置文件详解
[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.配置监控主机

grafana网站模板 grafana定制自己的页面_超详细_10

grafana网站模板 grafana定制自己的页面_mysql_11

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
监控项

grafana网站模板 grafana定制自己的页面_grafana网站模板_12

触发器

grafana网站模板 grafana定制自己的页面_php_13

表达式:设置触发警告的条件公式(重点)

聚合图形

优雅显示,多个图形显示在一块屏幕上

grafana网站模板 grafana定制自己的页面_php_14

八. 报警方式

邮件报警
第一个历程:配置邮箱信息,谁来给你发邮件

grafana网站模板 grafana定制自己的页面_mysql_15

grafana网站模板 grafana定制自己的页面_mysql_16

第二个历程:设置遇到什么级别灾难发送信息

grafana网站模板 grafana定制自己的页面_zabbix_17

grafana网站模板 grafana定制自己的页面_mysql_18

第三个历程:发生灾难级别,查看是否发送邮件
微信报警(zabbix4.0)
第一个历程:创建微信公众号查看企业账号信息

1.申请企业微信公众号

grafana网站模板 grafana定制自己的页面_zabbix_19

应用创建完之后,会在页面生成这个应用,点击打开

grafana网站模板 grafana定制自己的页面_超详细_20

点开这个应用,里面会有生成的AgentID,Secret,收信人账号信息,以及我的企业选项里的企业ID

grafana网站模板 grafana定制自己的页面_mysql_21

grafana网站模板 grafana定制自己的页面_mysql_22

第二个历程: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},添加完报警媒介类型后勾选启用

grafana网站模板 grafana定制自己的页面_grafana网站模板_23

设置报警级别及收件人

grafana网站模板 grafana定制自己的页面_mysql_24

grafana网站模板 grafana定制自己的页面_mysql_25


测试

grafana网站模板 grafana定制自己的页面_超详细_26

结束

九.web检测监控(高级功能)

web检测:模拟用户访问网站页面,监控指定的页面,可以给模板配置,也能给主机配置

1.web检测配置

grafana网站模板 grafana定制自己的页面_zabbix_27


grafana网站模板 grafana定制自己的页面_php_28

grafana网站模板 grafana定制自己的页面_grafana网站模板_29

名称:一般写哪台主机的哪套网站

客户端:用什么客户端模拟访问你要监控的网页

用户代理字符串:当客户端中浏览器没有你选择的版本时,可以自己书写,在nginx日志中可以看到

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36

grafana网站模板 grafana定制自己的页面_mysql_30

grafana网站模板 grafana定制自己的页面_超详细_31

grafana网站模板 grafana定制自己的页面_mysql_32


名称:写具体那个网页(这个是你监控的网页)

URL:要监控网页的网址

跟随跳转:如果配置网页的话,跟着一起跳转到另外一个页面

要求的字串:监控网页上显示的内容来判断网页是否正常

要求的状态码:200 301 302 都属于正确的状态码.

十.matomo监控PV UV IP

含义

如何分析

PV

page view 页面访问量

分析日志访问的uri的个数

ip

独立的ip数量

分析访问日志ip的个数

UV

独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。

分析cooki

Session

会话是指在指定的时间段内在您的网站上发生的一系列互动,所以会话次数是一段时间内用户向您的网站发起的会话(Session)总数量。一次会话会浏览一个或多个页面

grafana网站模板 grafana定制自己的页面_mysql_33

grafana网站模板 grafana定制自己的页面_zabbix_34

可以选用三剑客分析,也可以根据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界面编写配置自动发现–>编写自动发现动作–>配置客户端文件

grafana网站模板 grafana定制自己的页面_zabbix_35

# 检查:服务端通过执行 zabbix_get -s ip -k  system.uname 来判断这个IP是否是agent
# 设备唯一性:如果这个IP地址被发现并且加入了监控,可以根据这个IP避免一直被加入

grafana网站模板 grafana定制自己的页面_zabbix_36

创建动作

grafana网站模板 grafana定制自己的页面_超详细_37

grafana网站模板 grafana定制自己的页面_mysql_38

grafana网站模板 grafana定制自己的页面_php_39

自动发现主机IP:{DISCOVERY.DEVICE.IPADDRESS}

>消息内容
客户端名称: {DISCOVERY.SERVICE.NAME}
客户端端口: {DISCOVERY.SERVICE.PORT}
客户端状态: {DISCOVERY.SERVICE.STATUS}

grafana网站模板 grafana定制自己的页面_mysql_40

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

动作,选择自动注册为事件源,然后单击创建操作

grafana网站模板 grafana定制自己的页面_超详细_41

grafana网站模板 grafana定制自己的页面_超详细_42


grafana网站模板 grafana定制自己的页面_超详细_43


grafana网站模板 grafana定制自己的页面_php_44

grafana网站模板 grafana定制自己的页面_grafana网站模板_45

grafana网站模板 grafana定制自己的页面_php_46

3.主动模式与被动模式

zabbix监控默认是被动模式

主动模式是优于被动模式的

被动模式,100个监控需要100个回合

主动模式,100个监控只需要一个回合

相同的服务器配置(8核 16g),被动模式下只能监控200台服务器,而主动模式可以监控1000台。

grafana网站模板 grafana定制自己的页面_超详细_47

被动模式原理:

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客户端(主动式)

grafana网站模板 grafana定制自己的页面_grafana网站模板_48

然后检查,同一时间收到所有的监控项

grafana网站模板 grafana定制自己的页面_grafana网站模板_49

十二.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的压力。

grafana网站模板 grafana定制自己的页面_超详细_50

二.分布式监控部署

环境准备

主机

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

grafana网站模板 grafana定制自己的页面_php_51

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页面检查

grafana网站模板 grafana定制自己的页面_mysql_52

十三.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.

grafana网站模板 grafana定制自己的页面_php_53

active connections – 此时的并发链接数
server accepts handled requests — 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

连接与请求的关系

grafana网站模板 grafana定制自己的页面_grafana网站模板_54

用户访问一次就是一个连接,一个连接打开网页会有多个请求

长链接和短链接

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页面设置监控项和图形并且出图显示

grafana网站模板 grafana定制自己的页面_php_55

grafana网站模板 grafana定制自己的页面_mysql_56

grafana网站模板 grafana定制自己的页面_php_57

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页面设置监控项

grafana网站模板 grafana定制自己的页面_超详细_58

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监控页面

grafana网站模板 grafana定制自己的页面_mysql_59


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页面报错

grafana网站模板 grafana定制自己的页面_mysql_60


产生原因: 数据库版本与zabbix不搭

解决办法:进入数据库修改

MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> update dbversion set mandatory=4000000;
MariaDB [zabbix]> flush privileges;
问题3:

grafana网站模板 grafana定制自己的页面_mysql_61

产生原因:zabbix时区不是中国

解决办法:

vim /etc/httpd/conf.d/zabbixx.conf
20:       php_value date.timezone Asia/Shanghai

问题4:zabbix监控web界面显示中文乱码

grafana网站模板 grafana定制自己的页面_mysql_62

产生原因:字体不对

grafana网站模板 grafana定制自己的页面_php_63

解决办法:

grafana网站模板 grafana定制自己的页面_php_64

问题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地址,不是主机名

grafana网站模板 grafana定制自己的页面_php_65


产生原因:/etc/hosts没有对ip解析

解决办法:在/etc/hosts中添加ip对应的主机名。

问题7:自动发现配置完后,发现不了主机

产生原因:检查发现,当自动发现主机时,不能执行动作,动作中有一个条件是agent端开机时间小于200s才符合条件,执行动作(发送邮件,分发模板等)

grafana网站模板 grafana定制自己的页面_grafana网站模板_66

问题8:自动发现中,当动作的操作存在发送消息的操作时,会一直发送消息

grafana网站模板 grafana定制自己的页面_php_67

产生原因:执行动作的条件没有设置好,到了检测时间,符合要求还会继续执行动作,一直发送信息。

解决办法:还没有好的办法,目前是多加一个条件,判断机器运行超过200s就不符合条件了,就不在执行动作。

但是会有个小坑,当你把检测的主机删除重新自动发现主机时,服务器此时可能运行远远超过200秒了,怎么样都不会检测到。

grafana网站模板 grafana定制自己的页面_grafana网站模板_68

十四.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、验证。