小铨,铨程互动科技创始人,诞生于 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.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 10.0.0.1 五09 1.00s 0.00s 0.00s w
复制代码
2)top
[root@web02 ~]# top
top - 12:31:10 up 1 day, 8:11, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 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 st
KiB Mem : 2030148 total, 1457796 free, 190464 used, 381888 buff/cache
KiB 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 ~]# glances
web02 (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-core
MEM [|||||||||| 13.1%] user: 1.9% irq: 0.0% total: 1.94G inactive: 145M total: 1024M 1 min: 0.14
SWAP [ 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 ls
backup.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 available
Mem: 1982 186 1413 9 383 1612
Swap: 1023 0 1023
[root@web02 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 186M 1.4G 9.4M 383M 1.6G
Swap: 1.0G 0B 1.0G
复制代码
2)top
3)glances
4)htop
后面这几个命令在看 CPU 的时候已经演示了。
如何查看单个进程占用内存?
#进程占用内存公式
pmem = VmRSS / MemTotal * 100
process mem = 虚拟内存 / 总内存 * 100
复制代码
python 脚本
[root@web02 ~]# cat mem.py
#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
# 收集程序所占用的物理内存大小,占所有物理内存的比例
# Python: 2.7.6
import sys
import os
from 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% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.5M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 1014M 124M 891M 13% /boot
tmpfs 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% /dev
tmpfs 253768 1 253767 1% /dev/shm
tmpfs 253768 700 253068 1% /run
tmpfs 253768 16 253752 1% /sys/fs/cgroup
/dev/sda1 524288 326 523962 1% /boot
tmpfs 253768 1 253767 1% /run/user/0
复制代码
2)iotop
[root@web02 ~]# iotop
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
复制代码
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/vmtoolsd
sda1 0 0 0.0 0.0 0 0 271 root -20 S 0:00.00 0 0 bioset
sda2 0 0 0.0 0.1 191M 1.21M 545 root 0 S 0:00.00 0 0 /usr/sbin/gssproxy -D
sda3 0 0 0.0 0.0 0 0 227 root -20 S 0:00.00 0 0 ata_sff
sr0 0 0 0.0 0.2 124M 4.41M 2356 nginx 0 S 0:00.30 0 0 nginx: worker process
sr1 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 ~]# glances
NETWORK Rx/s Tx/s TASKS 100 (138 thr), 2 run, 98 slp, 0 oth sorted automatically by cpu_percent, flat view
eth0 168b 1Kb
lo 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 347b
web02 => gateway 0b 268b 268b
<= 0b 268b 268b
#按P键可以看到与什么服务在交互
#Mb 与 MB的区别
#百兆带宽:100Mb
#实际:100Mbps / 8 = 12MB
复制代码
3)nethogs
该命令可以查看某个进程所使用的流量
[root@web02 ~]# nethogs
NetHogs 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 ~]# ifconfig
eth0: 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 -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
复制代码
TCP11 种状态监控命令
1)netstat
[root@driver-zeng ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:52022 0.0.0.0:* LISTEN
tcp 0 0 172.24.156.150:59936 100.100.30.25:80 ESTABLISHED
tcp 0 0 172.24.156.150:52022 139.226.172.217:54116 ESTABLISHED
tcp6 0 0 :::873 :::* LISTEN
udp 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 6
ESTABLISHED 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 2
done
[root@web02 ~]# sh free.sh
2018-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/messages
Out of memory: Kill process 29957 (dd) score 366 or sacrifice child
Killed process 29957 (dd) total-vm:2532680kB, anon-rss:1416508kB, filers:0kB
复制代码
使用脚本监控 nginx
前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警
#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" 133411023@qq.com
fi
复制代码
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 zabbix
MariaDB [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.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123
复制代码
启动 zabbix-server 并加入开机自启
[root@web02 ~]# systemctl start zabbix-server
[root@web02 ~]# systemctl enable zabbix-server
[root@web02 ~]# netstat -lntup
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 5129/zabbix_server
复制代码
修改时区,启动 httpd
[root@web02 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_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.conf
Server=127.0.0.1,10.0.0.8
ServerActive=127.0.0.1,10.0.0.8
#启动客户端
[root@web01 ~]# systemctl start zabbix-agent
#添加开机自启
[root@web01 ~]# systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
#检查10050端口
[root@web01 ~]# netstat -lntup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 9204/zabbix_agentd
复制代码
在 web 页面添加监控
#添加监控之前我们必须保证10050端口可以通信
[root@web02 ~]# telnet 10.0.0.7 10050
Trying 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
总用量 0
lrwxrwxrwx 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.conf
DBHost=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.7
ERROR 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 alive
UserParameter=mysql.version,mysql -V
复制代码
自定义监第一步
使用命令查看服务器当前登录用户会话数量
[root@web01 zabbix]# uptime |awk '{print $6}'
复制代码
自定义监第二步
把命令加入配置文件并起名
UserParameter=user.count,uptime |awk '{print $6}'
复制代码
自定义监第三步
客户端,查看监控项
[root@web01 zabbix]# zabbix_agentd -p
user.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_get
usage:
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.count
1
复制代码
自定义监第五步
在 web 页面添加监控项






自定义监第六步
添加触发器:当用户登录超过 2 人的时候,就要报警。









优化触发器名称
使用 zabbix 内置变量,来优化触发器的名称,此处使用的是
主机名变量:{HOST.NAME}
IP 地址变量:{HOST.IP}
Monitor Login User Count Problem 主机名:{HOST.NAME} IP地址:{HOST.IP}
复制代码


前端 web 页面告警

自定义监第七步
添加图形化界面。




自定义监第八步
给触发器,添加动作,邮件告警

如果事件源是触发器,那么就会触发动作,触发什么动作呢?就需要自己来创建了。
自定义触发器--->动作--->通知
如果事件源是触发器-->则创建一个触发的动作-->通知
1.我怎么通知。通过介质(配置一个邮箱的发件人)
2.通知给谁。(接收的邮箱)
3.通知的内容(内容可以自定义)








评论 (1 条评论)