zabbix

1.公司监控可以从哪些方面入手

1.硬件监控路由器、交换机、防火墙
2.系统监控CPU、内存、磁盘、硬盘、网络、进程、TCP
3.服务监控Nginx、PHP、Tomcat、Redis、memcache、MySQL
5.日志监控ELK(收集、存储、分析、展示)日志易
6.WEB监控请求时间、响应时间、加载时间
7.业务监控,推广活动引入多少流量、产生多少注册量、带来多大价值

2.系统常用的监控命令

  • CPU监控命令:top
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

%us:用户空间占用cpu的百分比
%sy:内核空间占用cpu百分比
%ni:改变过优先级的进程占用cpu的百分比
%id:空闲CPU百分比
%wa:IO等待占用cpu的百分比
%hi:硬中断占用CPU的百分比
%si:软中断占用cpu的百分比
  • 系统负载:w、uptime
[root@db02 ~]# w
 09:23:40 up 25 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:00   22:44   0.04s  0.01s bash
root     pts/0    10.0.0.1         09:03    4.00s  0.02s  0.00s w

[root@db02 ~]# uptime
 09:23:45 up 25 min,  2 users,  load average: 0.00, 0.01, 0.05
  • 内存监控命令:free
[root@db02 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            974         100         729           7         144         715
Swap:             0           0           0


Men行(第二行)是内存的使用情况
Swap行(第三行)是交换空间的使用情况
total:列显示系统总的可用物理内存和交换空间大小
used:列显示已经被使用的物理内存和交换空间。
free:显示还有多少物理内存和交换空间可用使用
shared:列显示被buffer和cache使用的物理内存大小
available:例显示还可以被应用程序使用的物理内存大小。
  • 磁盘监控命令:df(使用率)、iotop(监控磁盘io)
[root@db02 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G  1.6G   18G   9% /

[root@db02 ~]# iotop -o
Total DISK READ :   0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:   0.00 B/s | Actual DISK WRITE:       0.00 B/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND 
  • 网络监控命令: ifconfig、 route、 glances、 iftop(监控网卡流量)、 nethogs、 netstat
单位换算
Mbps 100Mbps/8
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup

3.zabbix的安装部署(4.0版本)

  • 去清华源找zabbix源


    image.png

    image.png
  • 更新zabbix源

[root@db02 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
  • 安装 Zabbix 程序包,以及 MySQL、 Zabbix-agent
[root@db02 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
#启动数据库,并设置为开机自启动
[root@db01 ~]# systemctl start mariadb.service && systemctl enable mariadb.service
  • 初始化数据库数据,并设置root密码
[root@db01 ~]#  mysql_secure_installation
  • 登录数据库并创建zabbix库和授权用户
[root@db01 ~]# mysql -uroot -p123456
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
flush privileges;

#测试是否能够正常登录
[root@db01 ~]# mysql -uzabbix -pzabbix
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| zabbix             |
+--------------------+
2 rows in set (0.00 sec)
  • 导入Zabbix数据至数据库
[root@db01 ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.21/create.sql.gz |mysql -uzabbix -pzabbix zabbix
  • 修改zabbix配置文件
[root@db01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
  • 启动zabbix并加入开机自启动
[root@db01 ~]# systemctl start zabbix-server.service && systemctl enable zabbix-server.service 
  • 修改PHP时区,并启动httpd
[root@m01 ~]# grep "Shanghai" /etc/httpd/conf.d/zabbix.conf 
        php_value date.timezone Asia/Shanghai

systemctl start httpd
  • 页面访问测试


    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png
  • 启动客户端
[root@db01 ~]# systemctl start zabbix-agent.service
image.png

4.解决zabbix图形界面中文字体乱码

[root@db01 ~]# yum install wqy-microhei-fonts -y
[root@db01 ~]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
cp: overwrite ‘/usr/share/zabbix/assets/fonts/graphfont.ttf’? y
image.png

5.服务端安装zabbix测试命令

[root@db01 ~]# yum install -y zabbix-get.x86_64

6.在需被监控的机器安装zabbix-agent客户端

  • 安装zabbix源(aget源)
rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
  • 安装客户端
yum install -y zabbix-agent
  • 修改主机配文件并重启agent服务
[root@db02 ~]# vim /etc/zabbix/zabbix_agentd.conf 
  
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51            #zabbix服务端ip
ServerActive=10.0.0.51  #zabbix服务端ip
Hostname=db02   #本台服务器的名称
Include=/etc/zabbix/zabbix_agentd.d/*.conf    #添加自定义监控项的路径,文件以*.conf结尾即可

[root@db02 ~]# systemctl restart zabbix-agent.service
  • 在zabbix服务端利用zabbix_get看出是否可以取值这台机器
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k agent.hostname
db02

7.在zabbix web页面上添加主机

image.png

image.png

image.png

image.png

8.zabbix监控项的概念

监控项:你要监控的内容,项目1(内存) 项目2(CPU)
模版:将所有的监控项汇总在一起,单独保存在一个集合中,当其他同服务机器再次加入时候,直接使用。
键值:监控项目名称:将具体的值返回
应用集合:Tag 例如:CPU可以有多个监控项,将其多个监控指标归纳到CPU这一个大集合中,方便过滤查看。例如只查看CPU应用监控的各项键值:设定某个监控项报警的阈值条件
触发器:监控项的趋势,可以是多个监控项的内容
图形:把多个图形放在一起展示

总结:只要能取到值,就能监控

9.自定义取值的方法

#查看zabbix_agent配置文件观察lnclude路径
[root@db02 /etc/zabbix/zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51
ServerActive=10.0.0.51
Hostname=db02
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#在/etc/zabbix/zabbix_agentd.d/创建一个*.conf结尾文件
[root@db02 /etc/zabbix/zabbix_agentd.d]# vim tcp.conf
UserParameter=TIME_WAIT,netstat -antp|awk 'NR>2{print $6}'|grep TIME_WAIT|wc -l
UserParameter=LISTEN,netstat -antp|awk 'NR>2{print $6}'|grep LISTEN|wc -l
UserParameter=ESTABLISHED,netstat -antp|awk 'NR>2{print $6}'|grep ESTABLISHED|wc -l

#格式UserParameter=键值名称,命令取值

#重启agent服务
[root@db02 /etc/zabbix/zabbix_agentd.d]# systemctl restart zabbix-agent.service

#在zabbix服务端用get测试查看是否可取到值
 [root@db01 /etc/zabbix/zabbix_agentd.d]# zabbix_get -s 10.0.0.52 -k TIME_WAIT
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
33
#发现可以取到值,但是zabbix是以普通用户运行,所有需将netstat -antp中的p去掉为netstat -ant即可,然后重启服务

#Zabbix客户端自定义配置文件再次改变
[root@db02 /etc/zabbix/zabbix_agentd.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

[root@db02 /etc/zabbix/zabbix_agentd.d]# systemctl restart zabbix-agent.service

#server服务再次尝试取值
[root@db01 /etc/zabbix/zabbix_agentd.d]# zabbix_get -s 10.0.0.52 -k TIME_WAIT
33
  • 在web页面将监控项添加进去


    image.png

    image.png

    image.png
  • 使用隔离,快速添加监控项


    image.png

    image.png

    image.png

    image.png
  • 添加完成后,检查是否能够正常取到值


    image.png

10.触发器的创建

image.png

image.png

image.png

image.png

image.png
  • 也可以测试一下看是否能够触发报警


    image.png
  • 不满足条件状态


    image.png
  • 满足条件的状态


    image.png

    image.png

11.添加图形监控页面

image.png

image.png

image.png

image.png

12.聚合图形的添加

image.png

image.png

image.png

image.png

image.png

image.png

image.png

13.创建自定义模版(方便后期机器的监控)

image.png

image.png

image.png

image.png

按照添加和克隆的方法将,监控项全部添加至模版中,触发器,图形都一样


image.png

image.png

14.利用模版的方式监控一台新主机

image.png

image.png

image.png

image.png

image.png

15.添加邮件报警

image.png
  • 设置发信人信息


    image.png
  • 设置收信人信息


    image.png

    image.png
  • 设置动作,并自定义为中文邮件消息


    image.png

    image.png

    image.png

    image.png
  • 发送警告

报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称:Action-Email
默认标题:故障{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}

16.微信报警

  • 登录企业微信公众号添加账号

https://work.weixin.qq.com/wework_admin/loginpage_wx

  • 登录后在企业号上新建应用


    image.png
  • 上传logo,填写应用名称,应用介绍等


    image.png
  • 查看启动应用
    同时会生成应用的AgentId以及Secret,这个在后面步骤会有用


    image.png
  • 接口调用测试

http://work.weixin.qq.com/api/devtools/devtool.php

image.png
  • 这里的corpid为公司ID


    image.png
  • Corpsecret就是刚才创建应用生成的Secrt,确认没问题填写进去然后下一步
    如果没问题会显示200状态码


    image.png
  • 添加成员


    image.png
  • 关注公众号


    image.png
  • 查看自己的账号


    image.png
  • 查看zabbix服务端配置文件脚本存放路径
[root@db01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
  • 将脚本weixin.py放在zabbix特定目录
[root@db01 /usr/lib/zabbix/alertscripts]# ll
total 4
-rw-r--r-- 1 root root 1176 Nov 18  2019 weixin.py
  • web 页面配置发信人


    image.png

    image.png
#参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
  • 配置收信人


    image.png
  • 修改脚本的信息
[root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py 
..............
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
..............
  • 安装python安装包管理工具,和工具
yum install python-pip -y
pip install requests
  • 发信测试
[root@db01 /usr/lib/zabbix/alertscripts]# python weixin.py 微信账号姓名  '发信测试' '微信测试消息
image.png
  • 修改脚本的权限
chown -R zabbix.zabbix weixin.py
chmod +x weixin.py
chown -R zabbix.zabbix /tmp/weixin.log

17.自动发现和自动注册

#1.被监控服务器需安装zabbix-agent
#2.在zabbix-agent配置文件中写好,此台服务的名称
[root@db02 ~]# cat /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51
ServerActive=10.0.0.51
Hostname=db02          # 这个名称将成为自动发现和注册的条件
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#3.需将本机加入hosts解析中
[root@db02 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.52 db02      #本机的hosts解析

#4.zabbix-server服务端,需将,被监控的Zabbix客户端加入hosts解析,访问web页面显示主机名
[root@db01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.51 db01
10.0.0.52 db02
10.0.0.53 db03

web页面设置

  • 创建自动发现规则


    image.png

    image.png
  • 创建自动发现事件,并且发现后进行相应的操作


    image.png

    image.png
  • 创建自动注册事件

Zabbix的自动注册规则主要用于Agent主动且自动向Server注册,适用于当前云环境下的监控,主要由于云服务器ip比较随机不好控制。 Zabbix-Server在收到Zabbix-Agent的注册请求时,如果没有收到IP地址的值,则使用Zabbix-Agent和Zabbix-Server建立TCP连接时使用的IP地址。

image.png

image.png

image.png

18.主动模式和被动模式

被动模式:服务端发送一条指令,客户端就执行一条,100条需要来回一百次
主动模式:服务端把需要请求的数据打包在一起,客户端一次性执行完成再返回给服务端,100条数据只要来回一次

  • 被动模式数据采集例如下图一秒返回一个监控项的值


    image.png
  • web页面设置(修改单个监控项为主动模式)


    image.png

    image.png
  • web页面设置(批量更改模版监控项为主动模式)


    image.png

    image.png

    image.png

再次去查看最新数据,可发现所有的数据更新时间都在同一秒


image.png

19.低级自动发现

低级自动发现,创建监控模版,通过转换为json格式取值,再通过函数传参的取值的方式,并设置相应自动发现的规则,如正则表达式规则以及过滤等规则,做到自动监控,不同服务器同类型服务,但实际数据不同监控。例如:mysql多实例,每台机磁盘不同的挂载点等

  • 系统自带的低级自动发现会显示红字。


    image.png

    image.png
  • 查看zabbix所有key过滤后展示


    image.png
  • 解析成json格式


    image.png
  • 过滤出磁盘挂载类型


    image.png
  • web页面查看zabbix显示并没有那么多,是因为做了正则表达过滤


    image.png

    image.png

    image.png

    image.png
  • 使用zabbix_get获取key

因为根据过滤规则,只发现了一个xfs的key,使用zabbix_get可以查看到这个key

[root@db01 ~]# zabbix_get -s 10.0.0.52 -k vfs.fs.size[{#FSNAME},free]
ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [2] No such file or directory
#{#FSNAME}:为函数,我们下面直接给这个函数一个值,如:/目录

[root@db01 ~]# zabbix_agentd -p|grep vfs.fs.size
vfs.fs.size[/,free]                           [u|18432745472]
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k vfs.fs.size[/,free]
18740060160

20.利用zabbix低级自动发现监控mysql多实例

实验环境最少2G内存

  • mysql安装
#1.安装依赖源
 yum install -y cmake openssl-devel gcc gcc-c++ glibc ncurses-devel autoconf libaio-devel
#2.上传压缩包并解压
tar xf mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
#3.创建目录,并创建原链接
mkdir /application
mv mysql-5.6.42-linux-glibc2.12-x86_64 /application/mysql-5.6.42
cd /application/
ln -s mysql-5.6.42 mysql
#4.拷贝配置文件
cp mysql/support-files/my-default.cnf /etc/my.cnf
cp mysql/support-files/mysql.server /etc/init.d/mysqld

#5.创建mysql用户,并修改权限
useradd mysql -M -s /sbin/nologin
chown -R mysql.mysql /application/mysql*

#6.初始化mysql
cd mysql/scripts/
./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data/

#7.添加环境变量
vim /etc/profile.d/mysql.sh
export PATH="/application/mysql/bin:$PATH"
source /etc/profile

#8.替换路径
sed -i 's#/usr/local#/application#g' /etc/init.d/mysqld

#9.启动测试
service mysqld start
mysql
service mysqld stop
---------------------------------------------------------------------------------
#部署多实例

#1.创建多个目录(存放配置文件)
mkdir /data/330{7,8,9} -p
tree /data/

#2.准备多个实例的配置文件
vim /data/3307/my.cnf
[mysqld]
basedir = /application/mysql            
datadir = /data/3307/data                
socket = /data/3307/data/mysql.sock    
log_error = /data/3307/data/mysql.err    
pid_file = /data/3307/data/mysql.pid    
log_bin = /data/3307/data/mysql-bin    
server_id = 7                      
port = 3307

cd /data/3307/
cp my.cnf /data/3308/my.cnf && cp my.cnf /data/3309/my.cnf
sed -i 's#7#8#g' /data/3308/my.cnf && sed -i 's#7#9#g' /data/3309/my.cnf

#3.对多个实例进行初始化
cd /application/mysql/scripts/
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
tree -L 2 /data/

#4.启动多个实例
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &
netstat -lntup|grep mysql
  • 创建自动发现配置文件
vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh      #key执行脚本
  • 创建自动发现多实例脚本(带装换json格式)
mkdir /server/scripts/ -p
vim /server/scripts/mysql_discovery.sh
#!/bin/bash 
#mysql low-level discovery 
res=$(netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print $4}')
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'

# {#MYSQLPORT}:为取值变量
  • 测试自动发现脚本&&重启zabbix-agent
[root@db02 ~]# sh /server/scripts/mysql_discovery.sh 
{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"},{"{#MYSQLPORT}":"3309"}]}

systemctl restart zabbix-agent.service
  • 在zabbix服务端测试取值
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k mysql.discovery
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}

#原因是zabbix用户不能使用netstat的-p参数,解决方法为给netstat命令添加s超级权限
#再存放脚本的服务器为命令添加权限
[root@db01 ~]# which netstat
/usr/bin/netstat
[root@db01 ~]# chmod u+s /usr/bin/netstat
[root@db01 ~]# ll /usr/bin/netstat
-rwsr-xr-x. 1 root root 155008 Aug  9  2019 /usr/bin/netstat

#再次测试是否可以取值
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"},{"{#MYSQLPORT}":"3309"}]}
  • 在web页面设置自动发现的规则


    image.png

    image.png
  • 为被监控服务创建自动发现


    image.png

    image.png

    image.png

    image.png
  • 创建一个正则表达式规则


    image.png

    image.png
  • 为多实例创建登录密码,并模仿zabbix自带的mysql监控配置修改监控项

你可能感兴趣的:(zabbix)