写点什么

监控系统 -zabbix 快速入门

用户头像
小铨
关注
发布于: 2021 年 03 月 27 日
监控系统-zabbix快速入门


小铨,铨程互动科技创始人,诞生于 1994 年 7 月 24 日(农历),目前是一个码农,从事 PHP/GO 开发。一枚想让腾讯的马化腾,阿里巴巴的马云来挖我墙角的 90 后程序员。


监控系统概述

什么是监控?

监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。


为什么要做监控?

生活中:

1.超市监控:防内外偷



2.交通监控:测速,违章



企业中:

1.系统的监控:实际上是对系统不间断的实时监控

2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。

3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行

4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)



监控怎么来实现?




1.CACTI(网络监控)





2.NAGIOS(系统监控)





3.ZABBIX(分布式监控)





4.open-falcon(小米监控产品)





5.普罗米修斯(监控docker,K8S)





6.lepus天兔(数据库监控)


面试常问

面试官:你们公司监控是如何做的?

你:用 zabbix

面试官:...


如果面试,真的被问到以上问题,那么请按照逻辑层次,详细的回答出...

监控软件我们使用的是 zabbix,我们监控在不同的维度


硬件层面

如果说到硬件,肯定要先说物理服务器用的什么型号?

物理服务器,选型,Dell R710 720 730 ...

IDRAC自带一个远程管理卡,安装上一个软件包之后,就可以监控


如果不使用 dell 的 idrac 那就使用 zabbix 的IPMI接口监控硬件

1)CPU 温度,

2)风扇转速,

3)磁盘是否损坏,

4)CMOS 电池电量

5)内存是否损坏

6) ...



系统层面

1)CPU:使用率、负载

2)内存:使用率

3)磁盘:使用率,IO

4)进程

5)TCP 状态

6)系统负载

7) ...



网络层面

1)网络设备:路由器,交换机

2)网卡入口流量

3)网卡出口流量

4)带宽的峰值

5)...


使用 zabbix 的 snmp 方式监控


应用层面

当然了最基本的就是各个服务的进程,端口号

一些特殊程序我们还需要额外监控:


1)MySQL:主从复制是否有延迟(zabbix 监控模板)

2)redis:主从复制是否有延迟

监控思路:zabbix 没有固定模板,可以在主库中 set 一个 key 为时间戳,然后从库会同步这个时间戳(动态),写脚本时时获取这两个时间戳,做对比。

3)NFS:磁盘挂载状况

4)tomcat:JVM 监控,老年代、新生代、永久带、full-gc、垃圾回收

5)rsync 的同步情况,MD5 校验文件是否被篡改

6)...



业务层面

1)URL 的监控

2)API 的监控

3)nginx 的状态码

4)tomcat 的 exception

5)请求时间

6)响应时间

7)加载时间

8)渲染时间

9)...


单机监控命令了解

监控命令参考文档


CPU 监控命令

1)w

[root@web02 ~]# w 12:30:41 up 1 day,  8:10,  1 user,  load average: 0.00, 0.01, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/1    10.0.0.1         五09    1.00s  0.00s  0.00s w
复制代码

2)top

[root@web02 ~]# toptop - 12:31:10 up 1 day,  8:11,  1 user,  load average: 0.00, 0.01, 0.05Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie%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 stKiB Mem :  2030148 total,  1457796 free,   190464 used,   381888 buff/cacheKiB Swap:  1048572 total,  1048572 free,        0 used.  1652944 avail Mem
复制代码

3)htop

[root@web02 ~]# htop CPU[|                                                                0.7%]   Tasks: 27, 38 thr; 1 running
复制代码

4)glances

[root@web02 ~]# glancesweb02 (CentOS Linux 7.5.1804 64bit / Linux 3.10.0-862.el7.x86_64)                                                                                                                                                       Uptime: 1 day, 8:12:51
CPU [|| 2.9%] CPU 2.9% nice: 0.0% MEM 13.1% active: 310M SWAP 0.0% LOAD 1-coreMEM [|||||||||| 13.1%] user: 1.9% irq: 0.0% total: 1.94G inactive: 145M total: 1024M 1 min: 0.14SWAP [ 0.0%] system: 1.0% iowait: 0.0% used: 260M buffers: 2.03M used: 0 5 min: 0.09 idle: 97.1% steal: 0.0% free: 1.68G cached: 319M free: 1024M 15 min: 0.07
复制代码

5)uptime

[root@web02 ~]# uptime 12:33:18 up 1 day,  8:13,  1 user,  load average: 0.10, 0.08, 0.07
复制代码

不管用什么命令监控,查看 CPU,我们都必须了解,系统的用户态和内和态。

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
us: 用户态 跟用户的操作有关35%sy: 内和态 跟内核的处理有关65%id: CPU空闲
复制代码

当我们执行一个命令的时候,很快能出来结果,但是有多少人知道,这个很快,他都占用了哪些时间呢?

[root@web02 ~]# time lsbackup.sh  group_vars_web_group
real 0m0.002s 真实执行时间user 0m0.001s 用户执行时间sys 0m0.001s 系统执行时间
复制代码



内存监控命令

1)free

[root@web02 ~]# free -m              total        used        free      shared  buff/cache   availableMem:           1982         186        1413           9         383        1612Swap:          1023           0        1023
[root@web02 ~]# free -h total used free shared buff/cache availableMem: 1.9G 186M 1.4G 9.4M 383M 1.6GSwap: 1.0G 0B 1.0G
复制代码

2)top

3)glances

4)htop


后面这几个命令在看 CPU 的时候已经演示了。

如何查看单个进程占用内存?

#进程占用内存公式pmem = VmRSS / MemTotal * 100process mem = 虚拟内存 / 总内存 * 100
复制代码

python 脚本

[root@web02 ~]# cat mem.py#!/usr/bin/env python# _*_ coding:UTF-8 _*_# 收集程序所占用的物理内存大小,占所有物理内存的比例# Python: 2.7.6
import sysimport osfrom subprocess import Popen,PIPE
def get_pid(program): '获取目标程序的PID列表' p = Popen(['pidof',program],stdout=PIPE,stderr=PIPE) pids,stderrput = p.communicate()# pids = p.stdout.read() #这种方法也是可以的# 这里也可以对stderrput来进行判断 if pids: return pids.split() else: raise ValueError
def mem_calc(pids): '计算PIDs占用的内存大小' mem_total = 0 for pid in pids: os.chdir('/proc/%s' % pid) with open('status') as fd: for line in fd: if line.startswith('VmRSS'): mem = line.strip().split()[1] mem_total += int(mem) break return mem_total

def mem_percent(mem): '计算程序内存占用物理内存的百分比' with open('/proc/meminfo') as fd: for line in fd: if line.startswith('MemTotal'): total = line.strip().split()[1] percent = (float(mem)/int(total)) * 100 return percent

def main(): try: program = sys.argv[1] pids = get_pid(program) except IndexError as e: sys.exit('%s need a Program name ' % __file__) except ValueError as e: sys.exit('%s not a Process Name or not Start' % program ) mem_total = mem_calc(pids) percent = mem_percent(mem_total) return program,mem_total,percent
if __name__ == '__main__': program,mem_total,mem_percent=main() print('进程名称:%s\n物理内存为:%s\n百分比为:%.2f%%'% (program,mem_total,mem_percent))
复制代码



磁盘监控命令

1)df

[root@web02 ~]# df -h文件系统        容量  已用  可用 已用% 挂载点/dev/sda3        18G  1.4G   17G    8% /devtmpfs        981M     0  981M    0% /devtmpfs           992M     0  992M    0% /dev/shmtmpfs           992M  9.5M  982M    1% /runtmpfs           992M     0  992M    0% /sys/fs/cgroup/dev/sda1      1014M  124M  891M   13% /boottmpfs           199M     0  199M    0% /run/user/0
[root@web02 ~]# df -i文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点/dev/sda3 9436672 36259 9400413 1% /devtmpfs 251012 393 250619 1% /devtmpfs 253768 1 253767 1% /dev/shmtmpfs 253768 700 253068 1% /runtmpfs 253768 16 253752 1% /sys/fs/cgroup/dev/sda1 524288 326 523962 1% /boottmpfs 253768 1 253767 1% /run/user/0
复制代码

2)iotop

[root@web02 ~]# iotopTotal DISK READ :   0.00 B/s | Total DISK WRITE :       0.00 B/sActual DISK READ:   0.00 B/s | Actual DISK WRITE:       0.00 B/s
复制代码

3)iostat

#以兆为单位,每秒执行一次,执行10次[root@web02 ~]# iostat -dm 1 10
复制代码

4)dstat

[root@web02 ~]# dstat -cdngy----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw  0   0 100   0   0   0|1729B 3483B|   0     0 |   0     0 |  47    65  0   0 100   0   0   0|   0     0 |  66B  830B|   0     0 |  92   114  0   0 100   0   0   0|   0     0 |  66B  350B|   0     0 |  92   106  0   0 100   0   0   0|   0    16k|  66B  350B|   0     0 | 102   114
复制代码

5)glances

[root@web02 ~]# glances
DISK I/O R/s W/s 0.3 0.3 292M 5.96M 537 root 0 S 1:53.61 0 0 /usr/bin/vmtoolsdsda1 0 0 0.0 0.0 0 0 271 root -20 S 0:00.00 0 0 biosetsda2 0 0 0.0 0.1 191M 1.21M 545 root 0 S 0:00.00 0 0 /usr/sbin/gssproxy -Dsda3 0 0 0.0 0.0 0 0 227 root -20 S 0:00.00 0 0 ata_sffsr0 0 0 0.0 0.2 124M 4.41M 2356 nginx 0 S 0:00.30 0 0 nginx: worker processsr1 0 0 0.0 0.1 87.5M 2.11M 1108 root 0 S 0:00.44 0 0 /usr/libexec/postfix/master -w
复制代码



网络监控命令

1)glances

[root@web02 ~]# glancesNETWORK     Rx/s   Tx/s   TASKS 100 (138 thr), 2 run, 98 slp, 0 oth sorted automatically by cpu_percent, flat vieweth0        168b    1Kblo            0b     0b
复制代码

2)iftop

[root@web02 ~]# iftop                                               12.5Kb                                          25.0Kb                                         37.5Kb                                          50.0Kb                                    62.5Kb└──────────────────────────────────────────────┴───────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────────┴───────────────────────────────────────────────web02                                                                                                     => 10.0.0.1                                                                                                  1.31Kb  2.82Kb  2.82Kb                                                                                                          <=                                                                                                            208b    347b    347bweb02                                                                                                     => gateway                                                                                                      0b    268b    268b                                                                                                          <=                                                                                                              0b    268b    268b                                                                                                                                                                                                                    #按P键可以看到与什么服务在交互#Mb 与 MB的区别#百兆带宽:100Mb#实际:100Mbps / 8 = 12MB
复制代码

3)nethogs

该命令可以查看某个进程所使用的流量

[root@web02 ~]# nethogsNetHogs version 0.8.5
PID USER PROGRAM DEV SENT RECEIVED 2477 root sshd: root@pts/1 eth0 0.131 0.064 KB/sec ? root unknown TCP 0.000 0.000 KB/sec
TOTAL 0.131 0.064 KB/sec
复制代码

4)ifconfig

[root@web02 ~]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 10.0.0.8  netmask 255.255.255.0  broadcast 10.0.0.255        inet6 fe80::20c:29ff:fea0:7ef0  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:a0:7e:f0  txqueuelen 1000  (Ethernet)        RX packets 55217  bytes 64623101 (61.6 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 30950  bytes 4603140 (4.3 MiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 27 bytes 2072 (2.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27 bytes 2072 (2.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
复制代码

5)route

[root@web02 ~]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 eth010.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
复制代码



TCP11 种状态监控命令

1)netstat

[root@driver-zeng ~]# netstat -anActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address           Foreign Address         Statetcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTENtcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTENtcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTENtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTENtcp        0      0 0.0.0.0:52022           0.0.0.0:*               LISTENtcp        0      0 172.24.156.150:59936    100.100.30.25:80        ESTABLISHEDtcp        0      0 172.24.156.150:52022    139.226.172.217:54116   ESTABLISHEDtcp6       0      0 :::873                  :::*                    LISTENudp        0      0 172.17.0.1:123          0.0.0.0:*udp        0      0 172.18.0.1:123          0.0.0.0:*udp        0      0 172.24.156.150:123      0.0.0.0:*udp        0      0 127.0.0.1:123           0.0.0.0:*udp        0      0 0.0.0.0:123             0.0.0.0:*udp6       0      0 :::123                  :::*
[root@driver-zeng ~]# netstat -an|awk '/^tcp/ {print $NF}'|sort|uniq -c 4 ESTABLISHED 6 LISTEN
[root@driver-zeng ~]# netstat -an|awk '/^tcp/ {++state[$NF]} END {for(key in state) print key," \t" ,state[key]}'LISTEN 6ESTABLISHED 4
复制代码

2)ss

[root@driver-zeng ~]# ss -n|awk '{print $2}'|sort|uniq -c     42 ESTAB      1 State
复制代码



生产场景需求

如何每 1 分钟监控当前系统的内存使用状态,如果可用低于 100MB 则发送邮件。同时打印当前还剩余多少内存

1.如何获取内存的状态信息 free -m

2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'

3.如何进行数字的比对,高于 100MB 不处理,低于 100MB,发送邮件。

4.如何每分钟执行。


[root@web02 ~]# vim free.sh#!/bin/bash
while true;do free_av=$(free -m|awk '/^Mem/{print $NF}') Hostname=$(hostname)_$(hostname -I|awk '{print $2}') Date=$(date +%F)
if [ $free_av -lt 100 ];then echo "$Date: ${Hostname},内存低于100MB,还有${free_av}MB内存可用" fi sleep 2done
[root@web02 ~]# sh free.sh2018-10-12: web02_,内存低于100MB,还有20MB内存可用2018-10-12: web02_,内存低于100MB,还有6MB内存可用2018-10-12: web02_,内存低于100MB,还有5MB内存可用
[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
复制代码



系统的 oom

随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生 oom(out of memory)

1.当系统内存不足时就会大量使用 swap(虚拟内存)

2.当系统大量使用 swap 的时候,系统会特别卡

注意:有时可能内存还有剩余 300M 或者 500M,但是 swap 依然被使用


[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
[root@web02 ~]# tail -f /var/log/messagesOut of memory: Kill process 29957 (dd) score 366 or sacrifice childKilled process 29957 (dd) total-vm:2532680kB, anon-rss:1416508kB, filers:0kB
复制代码

使用脚本监控 nginx

前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警

#!/bin/bashnginx_process=`ps -ef|grep -c [n]ginx`if [ $nginx_process -lt 2 ];then    echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" 133411023@qq.comfi
复制代码


low de yi pi


zabbix 监控快速安装

方法一:官方安装方式


配置 zabbix 官方仓库

RHEL 7:
# rpm -ivh https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
RHEL 6:
# rpm -ivh https://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm
RHEL 5:
# rpm -ivh https://repo.zabbix.com/zabbix/3.4/rhel/5/x86_64/zabbix-release-3.4-1.noarch.rpm
复制代码



安装 zabbix-server

# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
复制代码

方法二:第三方源安装


配置 zabbix 第三方仓库

[root@web02 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm获取https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm警告:/var/tmp/rpm-tmp.NlJfKB: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY准备中...                          ################################# [100%]正在升级/安装...   1:zabbix-release-3.4-2.el7     ################################# [100%]
复制代码



安装 zabbix-server

[root@web02 ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
复制代码

配置 zabbix-server


初始化数据库

#启动数据库[root@web02 ~]# systemctl start mariadb#连接数据库[root@web02 ~]# mysql#创建zabbix库MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;#退出数据库MariaDB [(none)]> exit#进入SQL文件目录[root@web02 ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.15/#导入SQL文件[root@web02 zabbix-server-mysql-3.4.15]# zcat create.sql.gz |mysql zabbix#检查导入结果MariaDB [(none)]> show databases;MariaDB [(none)]> use zabbixMariaDB [zabbix]> show tables;#创建用户MariaDB [zabbix]> grant all on zabbix.* to zabbix@'localhost' identified by '123';Query OK, 0 rows affected (0.01 sec)
复制代码



编辑 zabbix-server 配置

[root@web02 ~]# vim /etc/zabbix/zabbix_server.confDBHost=localhostDBName=zabbixDBUser=zabbixDBPassword=123
复制代码



启动 zabbix-server 并加入开机自启

[root@web02 ~]# systemctl start zabbix-server[root@web02 ~]# systemctl enable zabbix-server[root@web02 ~]# netstat -lntuptcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      5129/zabbix_server
复制代码



修改时区,启动 httpd

[root@web02 ~]# vim /etc/httpd/conf.d/zabbix.confphp_value date.timezone Asia/Shanghai
[root@web02 ~]# systemctl start httpd[root@web02 ~]# systemctl enable httpd
复制代码

打开浏览器访问:http://10.0.0.8/zabbix








用户名:Admin

密码:zabbix



修改语言为中文


zabbix 使用-快速监控一台主机


在需要被监控的主机上安装 zabbix 客户端

[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.15-1.el7.x86_64.rpm获取https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.15-1.el7.x86_64.rpm警告:/var/tmp/rpm-tmp.7ESzKH: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY准备中...                          ################################# [100%]正在升级/安装...   1:zabbix-agent-3.4.15-1.el7    ################################# [100%]
复制代码



配置客户端并启动

#修改配置文件[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.confServer=127.0.0.1,10.0.0.8ServerActive=127.0.0.1,10.0.0.8#启动客户端[root@web01 ~]# systemctl start zabbix-agent#添加开机自启[root@web01 ~]# systemctl enable zabbix-agentCreated symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.#检查10050端口[root@web01 ~]# netstat -lntupProto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program nametcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      9204/zabbix_agentd
复制代码



在 web 页面添加监控

#添加监控之前我们必须保证10050端口可以通信[root@web02 ~]# telnet 10.0.0.7 10050Trying 10.0.0.7...Connected to 10.0.0.7.Escape character is '^]'
复制代码





绿了,就证明成功了


在上图中,会发现有图了,但是下面的字体是口口,这是因为中文字体没有显示出来,我们需要自己更换字体。

首先在 windows 系统中,找到字体存放目录C:\Windows\Fonts,找一个自己喜欢的字体,我选择的是楷体(simkai.ttf)。


将该字体上传至 zabbix 的字体目录下。

#进入zabbix字体目录[root@web02 fonts]# cd /usr/share/zabbix/fonts#查看目录内容[root@web02 fonts]# ll总用量 0lrwxrwxrwx 1 root root 33 10月 12 15:00 graphfont.ttf -> /etc/alternatives/zabbix-web-font#上传字体[root@web02 fonts]# rz simkai.ttf#删除原来的字体,或者mv备份[root@web02 fonts]# rm -f graphfont.ttf#将上传的字体改名[root@web02 fonts]# mv simkai.ttf graphfont.ttf#刷新web页面查看
复制代码


zabbix 监控基础架构

zabbix-agent(数据采集) --> zabbix-server(数据分析\报警) --> 数据库(数据存储) --> zabbix-web(数据展示)



zabbix 数据库拆分

目前我们 zabbix 的架构,单台 zabbix 服务:LAMP+zabbix

我们需要实现 zabbix 架构,将数据库拆分成单独的一台,LAP+zabbix+MySQL


1.环境准备

主机名 wanIPlanIP 角色 zabbix10.0.0.71172.16.1.71zabbix-serverdb0110.0.0.51172.16.1.51MySQL

2.导出原 MySQL 中的 zabbix 数据

#导出zabbix数据[root@zabbix ~]# mysqldump -uroot -p -B zabbix > /tmp/zabbix.sql#拷贝数据到db01[root@zabbix ~]# scp /tmp/zabbix.sql 10.0.0.51:/tmp
复制代码

3.准备新的数据库环境

#安装数据库[root@db01 ~]# yum install -y mariadb-server#启动数据库[root@web01 ~]# systemctl start mariadb#导入数据[root@web01 ~]# mysql -uroot -p < /tmp/zabbix.sql
复制代码

4.关闭原来的数据库并测试

#关闭数据库[root@web02 ~]# systemctl stop mariadb#打开浏览器查看
复制代码


凉凉,为啥呢?应为我们需要修改 php 代码连接数据库,就和之前我们修改 wordpres 连库代码一样


5.修改连接数据库代码

#修改代码[root@web02 ~]# vim /etc/zabbix/web/zabbix.conf.php<?php// Zabbix GUI configuration file.global $DB;
$DB['TYPE'] = 'MYSQL';$DB['SERVER'] = '10.0.0.51';$DB['PORT'] = '0';$DB['DATABASE'] = 'zabbix';$DB['USER'] = 'zabbix';$DB['PASSWORD'] = '123';
// Schema name. Used for IBM DB2 and PostgreSQL.$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';$ZBX_SERVER_PORT = '10051';$ZBX_SERVER_NAME = '曾老湿';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;#修改配置文件[root@web02 ~]# vim /etc/zabbix/zabbix_server.confDBHost=10.0.0.51#重启zabbix-server[root@web02 ~]# systemctl restart zabbix-server#打开浏览器测试
复制代码


新一轮的报错又出现了,刚才是连接不上localhost的,现在连接不上10.0.0.8 证明什么,证明我们新装的数据库不允许远程连接,我们可以使用命令行测试一下。

#是拒绝的,所以我们创建个用户即可[root@web02 ~]# mysql -uzabbix -p123 -h 10.0.0.7ERROR 1130 (HY000): Host '10.0.0.8' is not allowed to connect to this MariaDB server
#创建用户MariaDB [(none)]> grant all on zabbix.* to zabbix@'10.0.0.%' identified by '123';Query OK, 0 rows affected (0.00 sec)
复制代码



添加自定义监控项入门

需求:监控登录服务器的用户会话数量


自定义监控格式

### Option: UserParameter#       User-defined parameter to monitor. There can be several user-defined parameters.#       Format: UserParameter=<key>,<shell command>#       See 'zabbix_agentd' directory for examples.
#官方示例UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c aliveUserParameter=mysql.version,mysql -V
复制代码



自定义监第一步

使用命令查看服务器当前登录用户会话数量

[root@web01 zabbix]# uptime |awk '{print $6}'
复制代码



自定义监第二步

把命令加入配置文件并起名

UserParameter=user.count,uptime |awk '{print $6}'
复制代码



自定义监第三步

客户端,查看监控项

[root@web01 zabbix]# zabbix_agentd -puser.count                                    [t|1]
复制代码



自定义监第四步

在 zabbix-server 端获取 agent 端数据,使用 zabbix_get 命令

#安装zabbix_get命令[root@web02 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-get-3.4.15-1.el7.x86_64.rpm获取https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-get-3.4.15-1.el7.x86_64.rpm准备中...                          ################################# [100%]正在升级/安装...   1:zabbix-get-3.4.15-1.el7      ################################# [100%]
#语法[root@web02 ~]# zabbix_getusage: zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] --tls-connect cert --tls-ca-file CA-file [--tls-crl-file CRL-file] [--tls-agent-cert-issuer cert-issuer] [--tls-agent-cert-subject cert-subject] --tls-cert-file cert-file --tls-key-file key-file -k item-key zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] --tls-connect psk --tls-psk-identity PSK-identity --tls-psk-file PSK-file -k item-key zabbix_get -h zabbix_get -V

#获取数据[root@web02 ~]# zabbix_get -s 10.0.0.7 -k user.count1
复制代码



自定义监第五步

在 web 页面添加监控项








自定义监第六步

添加触发器:当用户登录超过 2 人的时候,就要报警。











优化触发器名称

使用 zabbix 内置变量,来优化触发器的名称,此处使用的是

主机名变量:{HOST.NAME}

IP 地址变量:{HOST.IP}


Monitor Login User Count Problem 主机名:{HOST.NAME} IP地址:{HOST.IP}
复制代码




前端 web 页面告警



自定义监第七步

添加图形化界面。






自定义监第八步

给触发器,添加动作,邮件告警


如果事件源是触发器,那么就会触发动作,触发什么动作呢?就需要自己来创建了。

自定义触发器--->动作--->通知

如果事件源是触发器-->则创建一个触发的动作-->通知

1.我怎么通知。通过介质(配置一个邮箱的发件人)

2.通知给谁。(接收的邮箱)

3.通知的内容(内容可以自定义)










发布于: 2021 年 03 月 27 日阅读数: 35
用户头像

小铨

关注

小铨,铨程互动科技创始人 2021.03.26 加入

诞生于1994年7月24日(农历)目前是一个码农,从事PHP/GO开发。一枚想让腾讯的马化腾,阿里巴巴的马云来挖我墙角的90后程序员。

评论 (1 条评论)

发布
用户头像
1
2021 年 03 月 29 日 13:30
回复
没有更多了
监控系统-zabbix快速入门