Zabbix监控系统-安装配置详解


监控系统概述

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


为什么要做监控?
- 企业中:

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


监控怎么来实现?


img

1.CACTI(网络监控)

img


img

2.NAGIOS(系统监控)

img


img

3.ZABBIX(分布式监控)

img


img

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

img


img

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

img


img

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

img

面试常问

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

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

打开面试技巧链接:TP

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


  • 硬件层面

如果说到硬件,肯定要先说物理服务器用的什么型号?
物理服务器,选型,Dell R710 720 730 ...

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

如果不使用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/{printNF}')
  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

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

img

img

img

img

img

img

img

用户名:Admin
密码:zabbix

img

img

修改语言为中文

img

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 '^]'

img

img

img

img
绿了,就证明成功了

img

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

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

img

将该字体上传至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页面查看

img

zabbix监控基础架构

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

img


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数据*

#导出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
#打开浏览器查看

img
凉凉,为啥呢?应为我们需要修改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
#打开浏览器测试

img

新一轮的报错又出现了,刚才是连接不上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)

img

img

添加自定义监控项入门

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


自定义监控格式

### 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}'

自定义监控第二步

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

自定义监控项目配置文件.
[root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.d/***.conf
UserParameter=user.count,uptime |awk '{print $6}'


自定义监第三步

客户端,查看监控项

# 查看所有监控项目
[root@web01 zabbix]# zabbix_agentd -p

# 查看指定监控项目
[root@web01 zabbix]# zabbix_agentd -t user.count
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
#####  报错   #############
访问限制
[root@zabbix ~]# zabbix_get -s 10.0.0.52 -k user.count
zabbix_get [33991]: Check access restrictions in Zabbix agent configuration

#原因: zabbix的版本和zabbix_get的版本不符造成此问题.

自定义监第五步

在web页面添加监控项

img

img

img

img

img

img


自定义监第六步

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

img

img

img

img

img

img

img

img

img


优化触发器名称

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

主机名变量:{HOST.NAME}
IP地址变量:{HOST.IP}

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

img

img


前端web页面告警

img


自定义监第七步

添加图形化界面。

img

img

img

img


自定义监第八步

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

img

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

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

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

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

img

img

img

img

img

img

img

img


zabbix安装4.0

1.zabbix架构

1.Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server

2.Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

3.数据库:所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中

4.zabbix web 为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。

5.Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

2.配置官方源安装

1)配置官方源

[root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

[root@zabbix ~]# ll /etc/yum.repos.d/
total 12
-rw-r--r--. 1 root root 2523 Jul  6 22:19 CentOS-Base.repo
-rw-r--r--. 1 root root  664 Jul  6 22:19 epel.repo
-rw-r--r--  1 root root  633 Oct  7  2019 zabbix.repo

# 安装zabbix_get工具
[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.24-1.el7.x86_64.rpm

2)开启仓库

#Zabbix 前端需要额外的基础安装包。 您需要在运行 Zabbix 前端的系统中启用可选 rpms 的软件仓库

#安装命令
[root@zabbix ~]# yum install -y yum-utils
[root@zabbix ~]# yum-config-manager --enable rhel-7-server-optional-rpms
Loaded plugins: fastestmirror

3)安装zabbix

[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

3.第三方源安装

1)配置第三方源

[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

2)安装zabbix

[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

4.安装数据库

[root@zabbix ~]# yum install -y mariadb-server

5.配置数据库

[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb

[root@zabbix ~]# mysql
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on *.* to zabbix@'localhost' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

6.配置zabbix连接数据库

[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

7.导入初始数据库

[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.24/create.sql.gz | mysql -u root -p zabbix

[root@zabbix ~]# mysql
MariaDB [(none)]> use zabbix
Database changed

MariaDB [zabbix]> show tables;
... ...
144 rows in set (0.00 sec)

8.启动zabbix服务

[root@zabbix ~]# systemctl start zabbix-server.service 
[root@zabbix ~]# systemctl enable zabbix-server.service

9.启动httpd

#修改时区
[root@web02 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai

[root@zabbix ~]# systemctl start httpd
[root@zabbix ~]# systemctl enable httpd

10.web页面访问zabbix

http://10.0.0.71/zabbix/index.php
#按照流程配置

#默认登录用户名密码:
Admin
zabbix

11.启动agent

[root@zabbix ~]# systemctl start zabbix-agent.service

监控一台远端主机

1.安装zabbix客户端

[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.1-1.el7.x86_64.rpm

2.配置客户端

[root@web01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=web01

3.启动客户端

[root@web01 ~]# systemctl start zabbix-agent.service 
[root@web01 ~]# systemctl enable zabbix-agent.service

#验证启动
[root@web01 ~]# netstat -lntp     
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      39529/zabbix_agentd

4.server端配置监控

1.添加主机组
2.创建主机
3.选择主机模板
4.添加主机

数据库拆分

1.环境准备

主机 IP 角色
zabbix 172.16.1.71,10.0.0.71 zabbix-server
db01 172.16.1.51 mysql

2.搭建新的数据库

[root@db01 ~]# yum install -y mariadb-server

3.授权数据库

[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# mysql
MariaDB [(none)]> grant all on *.* to zabbix@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

4.导出源数据库数据

[root@zabbix ~]# mysqldump -B zabbix > /tmp/zabbix.sql

5.将数据导入新库

[root@zabbix ~]# mysql -uzabbix -p -h172.16.1.51 < /tmp/zabbix.sql 
Enter password:

6.修改zabbix连接数据库配置

[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=123

7.修改zabbix-web端数据库配置

[root@zabbix ~]# vim /etc/zabbix/web/zabbix.conf.php 
<?php
// Zabbix GUI configuration file.
global DB;DB['TYPE']     = 'MYSQL';
#修改数据库地址
DB['SERVER']   = '172.16.1.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 = 'Linux脱产9期';IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

8.重启访问

[root@zabbix ~]# systemctl restart zabbix-server.service

9.停止旧库

[root@zabbix ~]# systemctl stop mariadb
Copyright © 2009 - Now . XPBag.com . All rights Reserved.
夜心的小站 » Zabbix监控系统-安装配置详解

提供最优质的资源集合

立即查看 了解详情