第一章·监控系统-zabbix快速入门

2022-10-31 17:55:33 浏览数 (3)

-曾老湿, 江湖人称曾老大。 -笔者QQ:133411023、253097001 -笔者交流群:198571640 -笔者微信:z133411023


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


监控系统概述

什么是监控?

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


为什么要做监控?

生活中:

1.超市监控:防内外偷

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


企业中:

1.系统的监控:实际上是对系统不间断的实时监控 2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。 3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行 4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)


监控怎么来实现?


1.CACTI(网络监控)


2.NAGIOS(系统监控)


3.ZABBIX(分布式监控)


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


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


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

面试常问

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

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

打开面试技巧链接:TP

监控软件我们使用的是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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

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

4)glances

代码语言:javascript复制
[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

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

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

代码语言:javascript复制
%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空闲

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

代码语言:javascript复制
[root@web02 ~]# time ls
backup.sh  group_vars_web_group

real    0m0.002s       真实执行时间
user    0m0.001s       用户执行时间
sys 0m0.001s       系统执行时间

内存监控命令

1)free

代码语言:javascript复制
[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的时候已经演示了。

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

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

python脚本

代码语言:javascript复制
[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('进程名称:%sn物理内存为:%sn百分比为:%.2f%%'% (program,mem_total,mem_percent))

磁盘监控命令

1)df

代码语言:javascript复制
[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

代码语言:javascript复制
[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

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

4)dstat

代码语言:javascript复制
[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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

代码语言:javascript复制
[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

代码语言:javascript复制
[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.如何每分钟执行。

代码语言:javascript复制
[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依然被使用

代码语言:javascript复制
[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

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

代码语言:javascript复制
#!/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官方仓库

代码语言:javascript复制
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

代码语言:javascript复制
# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

方法二:第三方源安装


配置zabbix第三方仓库

代码语言:javascript复制
[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

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

配置zabbix-server


初始化数据库

代码语言:javascript复制
#启动数据库
[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配置

代码语言:javascript复制
[root@web02 ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123

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

代码语言:javascript复制
[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

代码语言:javascript复制
[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客户端

代码语言:javascript复制
[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%]

配置客户端并启动

代码语言:javascript复制
#修改配置文件
[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页面添加监控

代码语言:javascript复制
#添加监控之前我们必须保证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:WindowsFonts,找一个自己喜欢的字体,我选择的是楷体(simkai.ttf)。

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

代码语言:javascript复制
#进入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.环境准备

主机名

wanIP

lanIP

角色

zabbix

10.0.0.71

172.16.1.71

zabbix-server

db01

10.0.0.51

172.16.1.51

MySQL

2.导出原MySQL中的zabbix数据

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

3.准备新的数据库环境

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

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

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

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

5.修改连接数据库代码

代码语言:javascript复制
#修改代码
[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 证明什么,证明我们新装的数据库不允许远程连接,我们可以使用命令行测试一下。

代码语言:javascript复制
#是拒绝的,所以我们创建个用户即可
[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)

添加自定义监控项入门

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


自定义监控格式

代码语言:javascript复制
### 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

自定义监第一步

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

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

自定义监第二步

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

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

自定义监第三步

客户端,查看监控项

代码语言:javascript复制
[root@web01 zabbix]# zabbix_agentd -p
user.count                                    [t|1]

自定义监第四步

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

代码语言:javascript复制
#安装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}

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


前端web页面告警


自定义监第七步

添加图形化界面。


自定义监第八步

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

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

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

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

1.我怎么通知。通过介质(配置一个邮箱的发件人) 2.通知给谁。(接收的邮箱) 3.通知的内容(内容可以自定义)

0 人点赞