目录

监控体系

1.监控知识概述 

2.怎么进行监控,比如:监控硬盘使用率

3.流行的监控工具

4.新入职公司,如何入手监控

5.监控核心 

6.单机监控

7.安装zabbix

8.通过web界面初始化配置zabbix:

9.开启centos客户端,测试zabbix监控

10.添加主机

11.在zabbix-server上修改图形中文乱码情况

1.分离zabbix数据库

2.自定义监控--磁盘吞吐量

3.zabbix报警音报警

4.zabbix邮件报警

例子1

例子2


监控体系

1.监控知识概述 

(1)对系统不间断的实时监控
(2)实时反馈系统和服务状态
(3)保证系统和服务可靠、安全
(4)保证业务持续稳定运行
     实时  反馈  可靠  安全

2.怎么进行监控,比如:监控硬盘使用率

(1)查看磁盘使用率:df -hi
(2)分析磁盘:block、inode
(3)截取磁盘使用率: df -h | grep /$ |awk '{print $(NF-1)}' |awk -F% '{print $1}'
(4)设置触发器:>=80

3.流行的监控工具

(1)cacti、nagios、zabbix
(2)lepus(天兔)数据库监控系统
(3)open-falcon 小米开源
(4)Prometheus普罗米修斯(docker k8s)

4.新入职公司,如何入手监控

(1)硬件、路由器、交换机、防火墙
(2)系统监控:cpu  内存  磁盘  网络 进程  tcp
(3)服务监控:nginx  php  tomcat redis  memcache  mysql
(4)web监控: 请求时间   响应时间   加载时间 
(5)日志监控:ELK(收集、存储、分析、展示)  日志易
(6)业务监控:活动引入流量  产生的注册量  带来多少价值

5.监控核心 

(1)发现问题
(2)定位问题
(3)解决问题
(4)总结问题

6.单机监控

(1)CPU: 
        w   top   htop   glances
(2)内存:
        free
        避免:OOM,全称“Out Of Memory” 现象
(3)网络:
        ifconfig  route  glances  iftop  netstat
(4)硬盘:
        df  iostat
        

7.安装zabbix

(1)安装zabbix源:
    
    rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm (阿里源)
    rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm  (官方源)
    rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm     (国内清华源)
    
    新版本:
    https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-1.el7.noarch.rpm     
(2)安装zabbix服务端软件
    yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent  mariadb-server
    
(3)启动数据库,创建zabbix数据库
    systemctl start mariadb
    systemctl enable mariadb
    
    初始化密码:mysql_secure_installation 
    登录数据库:mysql -uroot -p123456
    
    创建数据库:create database zabbix character set utf8 collate utf8_bin;
    赋权:grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
    
    导入zabbix初始化数据:zcat /usr/share/doc/zabbix-server-mysql-4.0.22/create.sql.gz |mysql -uzabbix -pzabbix zabbix 

(4)修改zabbix配置文件
vim /etc/zabbix/zabbix_server.conf 
添加:
DBPassword=zabbix
保存退出

启动:systemctl start zabbix-server
      systemctl enable zabbix-server

(5)修改httpd的时区
vim /etc/httpd/conf.d/zabbix.conf
定位20行:
php_value date.timezone Asia/Shanghai
保存退出

systemctl restart httpd
systemctl enable httpd
    

8.通过web界面初始化配置zabbix:

http://192.168.8.10/zabbix 根据提示,填写数据库密码,然后,一律下一步。
配置完成登录:
        用户名:Admin   
        密  码:zabbix
修改中文显示:Administration -- Users -- Admin -- Language -- Chinese -- Update

9.开启centos客户端,测试zabbix监控

(1)安装zabbix-agent
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm

(2)修改agent配置文件,指向zabbix-server的ip地址
vim /etc/zabbix/zabbix_agentd.conf
修改:
Server=192.168.8.10
保存退出
systemctl start zabbix-agent
systemctl enable zabbix-agent

10.添加主机

配置--主机--创建主机--

11.在zabbix-server上修改图形中文乱码情况

yum -y install wqy-microhei-fonts
cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf

1.分离zabbix数据库

(1)开启一台centos7(192.168.8.20),安装mariadb-server,创建zabbix数据库和用户
    安装数据库:yum -y install mariadb-server
    启动数据库:systemctl start mariadb
    修改密码:  mysql_secure_installation 
    登录数据库:mysql -uroot -p123.com
    创建数据库:create database zabbix character set utf8 collate utf8_bin;
    赋权:grant all on zabbix.* to zabbix@'%' identified by '123.com';
    
(2)在zabbix服务器上备份导出zabbix数据库(zabbix-server:192.168.1.112)
    备份:mysqldump -uroot -p123456 --databases zabbix > zabbix.sql
    
(3)在zabbix服务器上把备份的数据库文件导入到分布式数据库(mysql:192.168.1.104)上
    cat zabbix.sql | mysql -h 192.168.8.20 -uzabbix -p123.com zabbix

(4)修改zabbix-server上的数据库连接信息
    vim /etc/zabbix/zabbix_server.conf
    修改为:

DBHost=192.168.8.20
     DBName=zabbix
     DBUser=zabbix
     DBPassword=123.com


    保存退出
    
    vim /etc/zabbix/web/zabbix.conf.php
    修改为:

$DB['TYPE']     = 'MYSQL';
     $DB['SERVER']   = '192.168.8.20';
     $DB['PORT']     = '0';
     $DB['DATABASE'] = 'zabbix';
     $DB['USER']     = 'zabbix';
     $DB['PASSWORD'] = '123.com';


    保存退出
    
(5)重启zabbix和httpd服务
    systemctl restart zabbix-server httpd
    
######################################################

2.自定义监控--磁盘吞吐量

(1)检查磁盘的tps
    iostat |awk '/^sda/{print $2}'

(2)在agent客户端的配置文件目录下新增监控配置文件(键值对命名法)
    vim /etc/zabbix/zabbix_agentd.d/iostat.conf
    添加:
    UserParameter=iostat,iostat |awk '/^sda/{print $2}'
    保存退出
    systemctl restart zabbix-agent
    
(3)客户端查看监控项
    zabbix_agentd -p | grep iostat
    
(4)在服务端安装zabbix-get,查看客户端(192.168.8.20)新增监控项
    yum -y install zabbix-get
    zabbix_get -s 192.168.8.20 -p10050 -k iostat

(5)在zabbix web 界面进行监控项关联
  配置--主机--找到对应主机--监控项--创建监控项--命名--键值(iostat)--信息类型(浮点数)--应用集名
  监测--最新数据
  
######################################################

3.zabbix报警音报警

(1)前端声音报警
    右上角小人(用户)--正在发送信息--勾选
    
(2)添加触发器
    配置--主机--找到对应主机--触发器--创建触发器--命名--严重性--添加表达式--选择监控项--间隔--结果--添加
    
#######################################################

4.zabbix邮件报警

(1)配置--动作--启用report--应用
(2)右上角小人(用户)--报警媒介--添加--收件人邮箱地址(推荐使用qq邮箱)
(3)管理--报警媒介类型--email--添加SMTP服务器:smtp.qq.com--端口:465--HELO:qq.com--SMTP电邮:1793594335@qq.com
     --点击SSL/TLS--用户名称:1793594335@qq.com--密码:授权码(打开邮箱--设置--账户--开启smtp服务--获取授权码--保存配置)
(4)微信关联qq邮箱,实现微信报警
    首先点击进入微信“设置”选项。
    然后点击进入“账号与安全”设置选项。
    再点击进入“更多安全设置”选项。
    接着点击“邮箱地址”设置选项。
    最后输入需要绑定的邮箱地址,点击确定即可完成绑定
    
=====================================
磁盘tps: 每秒i/o请求数
数据库系统:
    tps:每秒事务处理量
    qps: 每秒查询处理量
    
参考:
4核8G  --  TPS:1200+,QPS:3600+ (腾讯云的cdb 实例,低配)
4核16G  --  TPS:3000+,QPS:9000+ (腾讯云的cdb 实例,中低配)
8核32G  --  TPS:5000+,QPS:12500+ (腾讯云的cdb 实例,中高配)
16核64G  --  TPS:7000+,QPS:20000+(腾讯云的cdb 实例,高配)

每天300w PV 的在单台机器上,这台机器需要多少QPS?
( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)。
一般需要达到139QPS,因为是峰值。(200万pv才有100峰值qps)

例子1

官方文档:
https://www.zabbix.com/documentation/4.0/zh/manual/

邮件脚本报警
原因:
    企业使用centos6,zabbix2.* ,zabbix没有email报警媒介模块

1.关闭zabbix-server上的邮件服务,安装mailx
systemctl stop postfix
systemctl disable postfix

yum -y install mailx

2.编辑mailx的配置,指定收件邮箱和用户密码
vim /etc/mail.rc
添加:

set from=1793594335@qq.com
 set smtp=smtps://smtp.qq.com:465
 set smtp-auth-user=1793594335@qq.com
 set smtp-auth-password=yuemqwmhdizdbjeg
 set smtp-auth=login
 set ssl-verify=ignore
 set nss-config-dir=/etc/pki/nssdb/


保存退出
测试邮件:echo 123 | mail -s test 1793594335@qq.com

3.zabbix-server编写邮件报警脚本

yum -y install dos2unix
 cd /usr/lib/zabbix/alertscripts/
 vim email_notice.sh


添加:

#!/bin/bash
 #export UTF-8
 FILE=/tmp/mail.txt
 echo "$3" > $FILE
 dos2unix -k $FILE
 /bin/mail -s "$2" $1 < $FILE


保存退出
赋予执行权:chmod +x email_notice.sh

4.zabbix web控制台关联邮件报警脚本
管理--报警媒介类型--关闭已有的email报警--右上角“创建媒体类型”
--“名称,类型(脚本),脚本名称(必须写对),参数添加3个:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}”
--更新

右上角--小人(用户)--报警媒介--“类型(邮件脚本,收件人:真实邮箱地址)”--添加--更新

##############################################################################
微信报警
1.申请企业微信
    我的企业--复制企业ID:wwb51a90f544c78346
    
    应用管理--创建应用--名称:报警机器人--选择部门--创建应用--点开报警机器人
    --复制:AgentId 1000002 ,Secret ptoSa9IMqSOinnOJ2Bq6-4i_EBKJbZ8tcG6R6TlhknU
    
    
2.编写python微信报警脚本,并修改企业id和用户密码
    复制weixin.py到zabbix-server的/usr/lib/zabbix/alertscripts/下
    cd /usr/lib/zabbix/alertscripts/
    vim weixin.py
    修改:
    corpid='wwb51a90f544c78346'        #企业ID
    appsecret='ptoSa9IMqSOinnOJ2Bq6-4i_EBKJbZ8tcG6R6TlhknU'   #报警机器人密码
    agentid=1000002                    #报警机器人ID
    保存退出
    赋予执行权:chmod 777 weixin.py
    格式转换:dos2unix -k weixin.py
    赋权weixin.log: 
            touch /tmp/weixin.log
            chown zabbix:zabbix /tmp/weixin.log
    
    测试发送微信:./weixin.py LiHongYu  test1 123456789
    (注:如果发送测试出错,比如:没有requests模块,可以 yum -y install python-pip;pip install requests)
    
3.zabbix web关联
管理--报警媒介类型--右上角“创建媒体类型”
--“名称(微信报警),类型(脚本),脚本名称(必须写对),参数添加3个:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}”
--更新

右上角--小人(用户)--报警媒介--“类型(微信报警,收件人:微信账号)”--添加--更新

###################################################################################
修改邮件通知内容
1.配置--动作--Report problems to Zabbix administrators
  操作:修改默认标题,修改消息内容
  主题:Problem: {EVENT.NAME}故障{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}
2.修改后,更新

例子2

创建图形:
配置--主机--web1--图形--右上角“创建图形”--填写“名称”--添加“监控项”--点击最后一行“添加”

查看图形:
监测--图形--选择“群组”--选择"主机"--选择“图形名称”

###########################################################################################
创建聚合图形:
监测--聚合图形--创建聚合图形--填写聚合图形“名称”--添加--选择新建聚合图形--编辑聚合图形

幻灯片演示:
聚合图形--创建幻灯片演示(把多个聚合图形,按照频率刷新演示)

###########################################################################################
zabbix模板文件下载:
https://www.zabbix.org/wiki/Zabbix_Templates/Official_Templates

###########################################################################################
percona模板监控mysql
环境:打开或安装一台mysql:192.168.8.20,并安装zabbix-agent,修改配置文件指向zabbix服务器

1.安装php环境
percona需要php环境
[root@mysql /data/soft]# yum install php php-mysql -y

2.下载软件
注意,安装完成后会有提示模版的路径位置

[root@mysql ~]# mkdir -p /data/soft
 [root@mysql ~]# cd /data/soft/
 [root@mysql /data/soft]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm[root@mysql /data/soft]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm

3.查看目录
进入安装目录会发现有2个目录,一个是脚本目录,一个是模版目录

cd /var/lib/zabbix/percona/
 scripts
   get_mysql_stats_wrapper.sh
   ss_get_mysql_stats.php
 templates
   userparameter_percona_mysql.conf
   zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

其中脚本目录里有2个脚本,用来获取数据库信息

cd scripts/
 ls
 get_mysql_stats_wrapper.sh  ss_get_mysql_stats.php

4.修改get_mysql_stats_wrapper.sh
修改get_mysql_stats_wrapper数据库登陆信息
第19行添加mysql账号密码
vim get_mysql_stats_wrapper.sh
修改第19行: 
    RES=`HOME=~zabbix mysql -uroot -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' 

5.修改ss_get_mysql_stats.php
vim ss_get_mysql_stats.php 
修改30,31行:

$mysql_user = 'root';
 $mysql_pass = '123456';

6.复制自定义监控项配置文件到zabbix目录
cd /var/lib/zabbix/percona/templates/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

7.重启agent
systemctl restart zabbix-agent 

8.测试key(IP是被监控端)
zabbix_get -s 192.168.8.20 -k MySQL.Select-scan 

9.导入模版
配置--模板--导入--浏览导入文件--勾选“聚合图形”--最后“导入”

10.主机链接模版
配置--主机--创建主机--选择模板

#############################################################################################################
自定义模版监控nginx状态
环境:打开或安装nginx服务器:192.168.8.20,并安装zabbix-agent,修改配置文件指向zabbix服务器
       yum -y install epel-release
       yum -y install nginx
       
1.开启监控页面并访问测试
[root@web01 ~]# vim  /etc/nginx/conf.d/default.conf
定位到11行下,添加:

location /nginx_status {
        stub_status on;
        access_log off;
    }


重启服务:systemctl restart nginx

[root@web01 ~]# curl 127.0.0.1/nginx_status/
 Active connections: 1 
 server accepts handled requests
  6 6 6 
 Reading: 0 Writing: 1 Waiting: 0

2.准备nginx监控状态脚本

[root@web01 /etc/zabbix/zabbix_agentd.d]# cat nginx_monitor.sh 
 #!/bin/bash
 NGINX_COMMAND=$1
 CACHEFILE="/tmp/nginx_status.txt"
 CMD="/usr/bin/curl http://127.0.0.1/nginx_status/"
 if [ ! -f $CACHEFILE  ];then
    $CMD >$CACHEFILE 2>/dev/null
 fi
 # Check and run the script
 TIMEFLM=`stat -c %Y $CACHEFILE`
 TIMENOW=`date +%s`if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then
     rm -f $CACHEFILE
 fi
 if [ ! -f $CACHEFILE  ];then
    $CMD >$CACHEFILE 2>/dev/null
 finginx_active(){
          grep 'Active' $CACHEFILE| awk '{print $NF}'
          exit 0;
 }
 nginx_reading(){
          grep 'Reading' $CACHEFILE| awk '{print $2}'
          exit 0;
 }
 nginx_writing(){
          grep 'Writing' $CACHEFILE | awk '{print $4}'
          exit 0;
 }
 nginx_waiting(){
          grep 'Waiting' $CACHEFILE| awk '{print $6}'
          exit 0;
 }
 nginx_accepts(){
          awk NR==3 $CACHEFILE| awk '{print $1}' 
          exit 0;
 }
 nginx_handled(){
          awk NR==3 $CACHEFILE| awk '{print $2}' 
          exit 0;
 }
 nginx_requests(){
          awk NR==3 $CACHEFILE| awk '{print $3}'
          exit 0;
 }case $NGINX_COMMAND in
     active)
         nginx_active;
         ;;
     reading)
         nginx_reading;
         ;;
     writing)
         nginx_writing;
         ;;
     waiting)
         nginx_waiting;
         ;;
     accepts)
         nginx_accepts;
         ;;
     handled)
         nginx_handled;
         ;;
     requests)
         nginx_requests;
         ;;
     *)
 echo 'Invalid credentials';
 exit 2;
 esac


保存退出
赋予执行权:chmod +x nginx_monitor.sh

3.编写zabbix监控配置文件

[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
 UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $1[root@web01 ~]# systemctl restart zabbix-agent.service

修改缓存文件权限:chown zabbix:zabbix /tmp/nginx_status.txt

4.使用zabbix_get取值
zabbix_get -s 192.168.8.20 -k nginx_status[accepts]

5.导入模版

6.链接模版

7.查看数据

##################################################################################################
参考web1添加其他nginx服务器:
配置--主机--web1--点击web1--选择“全克隆”--填写新nginx的ip

------------------------
网络发现:
    加快Zabbix部署
    简化管理
    无需过多管理,也能在快速变化的环境中使用Zabbix
    一般通过网络ip范围自动发现agent主机
    
步骤:
    客户端安装zabbix-agent,配置文件Server指向zabbix-server
    zabbix-server web管理界面--配置--自动发现--修改Local Network--添加主机网段--修改间隔--启用
    zabbix-server web管理界面--动作--事件源(自动发现)--修改现有自动发现--修改触发条件--在线不在线60秒
    zabbix-server web管理界面--动作--事件源(自动发现)--修改现有自动发现操作--添加标题--添加主机、群组、模板--导入--浏览导入文件--勾选“聚合图形”--最后“导入”
    
----------------------------    
自动注册:
    Zabbix Active agent可以实现自动注册,进而服务器对其进行监控。通过这种方式,无需在服务器上进行手动配置便可直接启动对新host的监控。

步骤:
    客户端安装zabbix-agent,配置文件Server,ServerActive指向zabbix-server,Hostname修改本机主机名
    zabbix-server web管理界面--动作--事件源(自动注册)--填写名称--触发条件主机名--操作(主机、群组、模板)

------------------------------
主被动模式(客户端):
被动模式:默认模式,由服务器向客户端发起监控项请求,每个监控项发一个请求,效率低
主动模式:由客户端主动向服务器申请监控项清单,一起发送给服务器,效率高,不占服务器太多资源

步骤:
客户端: zabbix-agent配置文件需要启用ServerActive指向服务器
         服务器上监控模板批量更新--类型--Zabbix客户端(主动式)