zabbix入门

一、监控知识概述

1.1 为什么要使用监控

  • 1)对系统不间断实时监控;
  • 2)实时反馈系统当前状态;
  • 3)保证服务可靠性安全性;
  • 4)保证业务持续稳定运行;

1.2 如何进行监控,比如监控磁盘使用率

  • 1)如何查看磁盘使用率 df -h;
  • 2)监控磁盘的那些指标 block、 inode;
  • 3)如何获取具体的信息 df -h|awk '///{print(NF-1)}';
  • 4)获取的数值到达多少报警 80%;

1.3 流行的监控工具

  • 1)Zabbix
  • 2)Lepus(天兔)数据库监控系统
  • 3)Open-Falcon 小米
  • 4)Prometheus(普罗米修斯, Docker、 K8s)

1.4 如果到一家新公司,如何入手监控

  • 1)硬件监控 路由器、交换机、防火墙
  • 2)系统监控 CPU、内存、磁盘、网络、进程、 TCP
  • 3)服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
  • 4)WEB 监控 请求时间、响应时间、加载时间
  • 5)日志监控 ELk(收集、存储、分析、展示)
  • 6)安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
  • 7)网络监控 smokeping 多机房
  • 8)业务监控 活动引入多少流量、产生多少注册量、带来多大价值

二、单机时代如何进行监控

2.1 CPU 监控

命令: w、 top、 htop、 glances

%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us 用户态: 跟用户的操作有关 35%
sy 系统态: 跟内核的处理有关 60%
id CPU 空闲:

2.2 内存监控

命令: free

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           977M        105M        724M        6.6M        148M        729M
Swap:          1.0G          0B        1.0G

内存的计算方式,使用如下python脚本:

#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
# 收集程序所占用的物理内存大小,占所有物理内存的比例
# OS: Centos 6.7  Python: 2.7.6
# __author__:Dahlhin

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))

使用方法:

$ python2.7 test.py mysqld
进程名称:mysqld
物理内存为:86664
百分比为:1.06%

参考网址:https://www.cnblogs.com/dachenzi/p/6812317.html

2.3 磁盘监控

命令: df、 iotop

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 25.32 33.36 221034 291193
设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小

2.4 网络监控

命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat

单位换算
Mbps 100Mbps/8
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup

三、zabbix监控快速安装

参考zabbix官方手册

3.1配置zabbix仓库

由于下载的其中指向的是zabbix官网,可能会下载失败,所以需要手动更换为阿里云的zabbix源!

$ vim /etc/yum.repos.d/zabbix.repo 
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
enabled=1
gpgcheck=0

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgcheck=0

3.2 安装zabbix所需软件包

$ yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent 

3.3 安装并初始化数据库

$ yum install -y mariadb-server
$ systemctl start mariadb && systemctl enable mariadb
$ mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

使用 MySQL 来导入 Zabbix server 的初始数据库 schema 和数据,

$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

3.4 为zabbix server配置数据库

$ vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
$ systemctl start zabbix-server && systemctl enable zabbix-server
$ ss -lnt | grep 10051     # 确认端口已经在监听

3.5 ZABBIX 前端配置

$ vim  /etc/httpd/conf.d/zabbix.conf
# 修改为当前的时区
        php_value date.timezone Asia/Shanghai
$ systemctl start httpd && systemctl enable httpd
$ ss -lnt | grep 80

zabbix前端可以在浏览器中通过http://IP/zabbix/进行访问,默认的用户名/密码:Admin/zabbix

zabbix入门
zabbix入门
zabbix入门
zabbix入门
zabbix入门
zabbix入门
zabbix入门

配置zabbix-web中文显示:

zabbix入门

$ yum -y install wqy-microhei-fonts
$ cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
# 修复中文乱码

四、快速监控主机

安装zabbix-agent,需注意:zabbix-server版本可以高于zabbix-agent版本,但是zabbix-agent版本不可以高于zabbix-server版本!建议版本选择一致!

zabbix-server主机执行zabbix_server -V命令可以查看zabbix-server版本信息!

4.1 安装、配置zabbix-agent

$ rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.25-1.el7.x86_64.rpm
$ vim /etc/zabbix/zabbix_agentd.conf 
Server=192.168.88.1    # 修改为zabbix-server地址
$ ss -lnt | grep 10050    # 确认端口正在监听的状态

4.2 zabbix-server测试获取zabbix-agent端数据

$ yum -y install zabbix-get.x86_64 
$ zabbix_get -s 192.168.88.2 -p 10050 -k "system.uptime"
508
# -s:指定zabbix agent端的IP地址;
# -p:指定zabbix agent端的监听端口;
# -k:指定监控项;
# 如果有输出结果,则表示zabbix server可以获取zabbix agent的数据,配置成功;

4.3 zabbix-web页面,添加主机

zabbix入门
zabbix入门
zabbix入门
zabbix入门

4.4 zabbix-agent端监控失败,排查思路

  • 检查IP地址和端口;
  • 检查firewalld和SELinux;
  • 检查zabbix-agent端配置文件;
  • 重新加载zabbix-agent配置文件;
  • 查看zabbix-agent日志信息;

五、zabbix监控基础架构

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

架构图:

zabbix入门

六、zabbix架构拆分数据库

6.1 准备一台mysql数据库(192.168.88.2),安装数据库(保证数据库版本一致);

$ yum install mariadb-server -y
$ systemctl start mariadb && systemctl enable mariadb

6.2 创建zabbix数据库,网络授权;

$ mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

6.3 在旧的数据库上备份zabbix库,然后恢复到新的数据库;

$ mysqldump -uroot --databases zabbix --single-transaction > `date +%F%H`-zabbix-sql
$ cat 2020-10-0816-zabbix-sql | mysql -h 192.168.88.2 -uzabbix -pzabbix zabbix
# 通过远程的方式导入到192.168.88.2的zabbix数据库中

6.4 修改zabbix-server配置文件指向数据库的IP地址

$ vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.88.2       # 只修改数据库连接地址
$ systemctl restart zabbix-server

6.5 修改zabbix-web配置文件指向数据库的IP地址

$ vim /etc/zabbix/web/zabbix.conf.php
$DB['SERVER']   = '192.168.88.2';        # 修改数据库地址
$ systemctl restart httpd

该方式不适合在生产环境使用,只适合在测试环境使用!因为会丢数据,主要的就是实现的思路!

七、自定义监控

7.1 自定义监控项

① 监控系统的登录状态,如果登录的xshell超过两个用户则触发报警
② 在zabbix-agent端自定义监控项,使用UserParameter
$ vim /etc/zabbix/zabbix_agentd.conf
# 添加以下内容
UserParameter=login.number,uptime | awk '{print $4}'
③ 重启zabbix-agent
$ systemctl restart zabbix-agent
④ 检查zabbix-agent端上自定义监控项是否生效
$ zabbix_agentd -p      # 获取zabbix-agent端所有的监控项内容
$ zabbix_agentd -p | grep login.number
login.number                                  [t|1]
⑤ zabbix-server测试是否可以获取到zabbix-agent端上的自定义监控项的值
$ yum -y install zabbix-get.x86_64         # 安装zabbix-get软件包
$ zabbix_get -s 192.168.88.2 -k login.number
1
⑥ web界面添加监控项

zabbix入门
zabbix入门
zabbix入门
zabbix入门

7.2 自定义触发器——>动作——>通知

① 自定义触发器

zabbix入门
zabbix入门
zabbix入门
手动测试,触发故障,使zabbix面板报警!
zabbix入门

② 启用动作

zabbix入门

③ 创建报警媒介

zabbix入门

zabbix入门

④ 定义收件人信息

zabbix入门
zabbix入门

⑤ 验证邮箱收到的消息

zabbix入门

7.3 值映射

创建一个监控22端口的监控项!

zabbix入门

zabbix入门
zabbix入门
zabbix入门
zabbix入门

效果已经产生!

7.4 监控TCP11种状态

① zabbix-agent编写监控文件(传参的形式)
$ vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
UserParameter=tcp_state[*],netstat -ant|grep -wc $1
$ systemctl restart zabbix-agent
② zabbix-server测试是否可以获取到值
$ zabbix_get -s 192.168.88.2 -k tcp_state[LISTEN]
6
$ zabbix_get -s 192.168.88.2 -k tcp_state[TIME_WAIT]
44
③ zabbix-web添加模板、创建监控项

zabbix入门
zabbix入门
zabbix入门
zabbix入门
zabbix入门
11种状态,也可挨个添加,也可选择克隆!自行完成!

zabbix入门

④ zabbix-agent使用该模板

zabbix入门
zabbix入门
zabbix入门

7.5 自定义触发器多条件

监控系统的内存可用百分比,如果低于25%,并且使用swap超过5%,则触发报警!

① zabbix-agent 编写监控文件监控内存使用百分比
$ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf 
UserParameter=mem.ava,free -m | awk '/^Mem/{print $NF/$2*100}'
② 重启zabbix-agent,agent与server测试是否可以获取到值
$ systemctl restart zabbix-agent
$ zabbix_agentd -p | grep mem.ava        # agent测试取值
mem.ava                                       [t|75.1279]
$ zabbix_get -s 192.168.88.2 -k mem.ava    # server测试取值
75.2303
③ zabbix-web添加监控项

zabbix入门
zabbix入门

④ 基于该监控项创建触发器

zabbix入门
zabbix入门
zabbix入门

使用dd if=/dev/zero of=/dev/null bs=500M count=1024压低内存,测试报警!

zabbix入门

⑤ zabbix-agent编写监控文件监控swap分区使用百分比
$ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf 
# 末尾添加
UserParameter=swap.use,free -m | awk '/Swap/{print $3/$2*100}'
$ systemctl restart zabbix-agent
$ zabbix_agentd -p | grep swap.use        # agent测试取值
0                                      [t|75.1279]
$ zabbix_get -s 192.168.88.2 -k swap.use    # server测试取值
0
⑥ zabbix-web添加监控项

zabbix入门
zabbix入门

⑦ 配置多条件触发器

zabbix入门
zabbix入门

使用dd if=/dev/zero of=/dev/null bs=1024M count=1024压低内存,测试报警!

zabbix入门
zabbix入门

邮件内容,信息不是太明确,所以进行以下修改!

⑧ 常用触发器表达式
and             # 并且
or              # 或者
last()          # 比对最新的值      
avg()           # 平均值
diff()          # 比对上一次文件内容
nodata()        # 收不到数据进行报警

(5m)            # 表示最近5分钟得到值
(#5)            # 表示最近5次得到的值
⑨ 配置故障消息

消息内容如下:

报警主机:{HOST.NAME1}
报警服务:{ITEM.NAME1}
报警Key1: {ITEM.KEY1}: {ITEM.VALUE1}
报警Key1: {ITEM.KEY2}: {ITEM.VALUE2}
严重级别:{TRIGGER.SEVERITY}

zabbix入门

$ swapoff -a
$ swapon -a        
# 释放swap分区空间

重新使用dd if=/dev/zero of=/dev/null bs=1024M count=1024压低内存,测试报警!

邮件内容如下:
zabbix入门

上一篇:专题分纲目录 MEM/MBA写作-论证有效性分析


下一篇:C++之ptr_fun、mem_fun和mem_fun_ref