重要!运维监控知识总结

监控

  • ❤监控概述
  • 1.硬件监控(机房)
  • 2.系统监控
    • (1)CPU
      • top命令详解
      • vmstat命令详解
      • iostat命令详解
    • (2)内存
      • free命令详解
    • (3)硬盘
      • iostat 详解
    • (4)网络
      • iftop命令详解
  • 3.应用监控
  • ❤Zabbix
    • 第1章 Zabbix概述
    • 第2章 Zabbix部署
      • YUM部署Zabbix服务器
      • 源码编译方式部署Zabbix服务器
    • 第3章 添加被监控主机
      • 监控项补充
      • 触发器补充
    • 第4章 告警
      • 1、邮件告警
      • 2、自定义脚本告警
      • 3、钉钉告警
    • 第5章 监控案例
      • 1、监控Web
      • 2、监控Tomcat
      • 3、监控Nginx
      • 4、监控MySQL
      • 5、监控TCP连接
    • ❤第6章 自动化监控
      • 1、10分钟如何监控100台服务器
      • 2、网络发现
      • 3、自动注册(事件源要对应)
    • 第7章 Grafana展示Zabbix监控数据

❤监控概述

为什么要监控?

  • 对系统不间断实时监控
  • 实时反馈系统当前状态
  • 保证业务持续性运行

如何去监控?
数据采集 ——》数据存储 ——》数据分析 ——》 展示和告警

监控对象
1.监控对象的理解:CPU是怎么工作的,原理
2.监控对象的指标:CPU使用率 CPU负载 CPU个数 上下文切换
3.确定性能基准线:怎么样才算故障?CPU负载多少才算高

监控范围
1.硬件监控 服务器的硬件故障
2.操作系统监控 CPU 内存 IO 进程
3.应用服务监控
4.业务监控

要监控什么?

监控类别 监控场景
硬件监控 温度,硬件故障等
系统监控 CPU,内存,硬盘,网卡流量,TCP状态,进程数
应用监控 Nginx,Tomcat,PHP,MySQL,Redis等
日志监控 系统日志、服务日志、访问日志、错误日志
安全监控 WAF,敏感文件监控
API监控 可用性,接口请求,响应时间
业务监控 例如电商网站,每分钟产生多少订单、注册多少用户、多少活跃用户、推广活动效果
流量分析 根据流量获取用户相关信息,例如用户地理位置、某页面访问状况、页面停留时间等

 

1.硬件监控(机房)

硬件监控:
1.使用IPMI
2.机房巡检

  • ipmitool
    1.硬件要支持
    2.操作系统 Linux IPMI
    3.管理工具 ipmitool

安装IPMI
yum install -y OpenIPMI ipmitool

使用IPMI两种方式
1.本地调用
2.远程调用 (IP地址 用户名和密码)

ipmi配置网络两种方式
1.ipmi over lan 独立

ipmitool help
重要!运维监控知识总结_第1张图片
 

路由器和交换机:SNMP监控

安装snmp:
yum install net-snmp net-snmp-utils

使用案例:
vim /etc/snmp/snmpd.conf
snmp代理启动,就能通过代理获取SNMP数据,SNMP不需要服务端,需要各个代理启动服务即可,代理获取到数据返回给服务端。默认监控UDP的161端口

snmp-utils

[root@aliyun ~]# cd /etc/snmp/
[root@aliyun snmp]# ll
total 24
-rw------- 1 root root 18861 Jun 23 23:39 snmpd.conf
-rw------- 1 root root   220 Jun 23 23:39 snmptrapd.conf
[root@aliyun snmp]# mv snmpd.conf snmpd.conf.bak
[root@aliyun snmp]# vim snmpd.conf
[root@aliyun snmp]# cat /etc/snmp/snmpd.conf
rocommunity kolor 172.18.203.141 


[root@aliyun snmp]# systemctl start snmpd
[root@aliyun snmp]# netstat -nulp | grep 161
udp        0      0 0.0.0.0:161             0.0.0.0:*                           5129/snmpd   

基于 TCP/IP 的网络管理包括两部分:网络管理站 (manager) 和被管理的网络单元(被管设备)。这些被管设备的共同点就是都运行 TCP/IP 协议。管理进程和代理进程之间的通信有两种方式,一种是管理进程向代理进程发出请求,询问参数值,另一种方式是代理进程主动向管理进程报告某些重要的事件。
基于 TCP/IP 的网络管理包含 3 个组成部分:
   ( 1 ) 一个管理信息库( MIB )。管理信息库包含所有代理进程的所有可被查询和修改的参数。
   ( 2 ) 关于 MIB 的公用结构和表示符号,叫做管理信息结构 SMI 。例如: SMI 定义计数器是一个非负整数,它的计数范围是 0-4294967295 ,当达到最大值后,又从 0 开始。
   ( 3 ) 管理进程和代理进程之间的通信协议,叫做简单网络管理协议 SNMP 。 SNMP 包括数据交换的格式等,主要采用 UDP 协议。

1 、协议: SNMP 定义了 5 种报文:
   ( 1 ) get-request 操作:从代理进程处提取一个或多个参数值。
   ( 2 ) get-next-request 操作:从代理进程处提取一个或多个参数的下一个参数值。
   ( 3 ) set-request 操作:设置代理进程的一个或多个参数值。
   ( 4 ) get-response 操作:由代理进程发出的一个或多个参数值。它是 3 种的响应操作。
   ( 5 ) trap 操作:代理进程主动发出的报文,通知管理进程由事情发生。
   前面 3 个操作是由管理进程向代理进程发出的,后两个是代理进程发给管理进程的。
   说明: ◆ 前 4 种操作是简单的请求-应答方式,由于采用 UDP 协议,因此一定要有超时和重传机制。
◆ 管理进程采用 UDP 的 161 端口,代理进程使用 UDP 的 162 端口,因此一个系统可以同时为管理进程和代理进程。

对象标识符(OID,唯一标识一个MIB对象)
   对象标识是一种数据类型,它指明一种授权命名的对象。对象标识是一个整数序列,以点分隔。这些整数构成一个树型结构,类似于 DNS 和文件系统。对象标识从顶部开始,顶部没有标识,以 root 表示。所有的 MIB 变量都从 1.3.6.1.2.1 这个标识开始。树上的每个节点还有文字名,例如 1.3.6.1.2.1 就和 iso.org.dod.internet.memt.mib 对应。

iso.org.dod.internet.mgmt.mib.ip.ipInReceives
相应的数字表示(对象标识符OID,唯一标识一个MIB对象)为:
1.3.6.1.2.1.4.3
重要!运维监控知识总结_第2张图片

需要注意的是,MIB中的管理对象的OID有些需要动态确定,如IP路由表,为了指明地址202.120.86.71的下一站路由(next hop),我们可以引用这样的实例:

iso.org.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.202.120.86.71, 相应的数字表示为:1.3.6.1.2.1.4.21.1.7.202.120.86.71

2、Linux SNMP oid
Linux下常用服务器监控 对应的OID:https://blog.csdn.net/apple_llb/article/details/50494787

https://www.ibm.com/developerworks/cn/linux/l-cn-snmp/?spm=a2c4e.11153940.blogcont564652.7.44c050a2mHPaX5

如:系统的启动时间 对应的OID是 sysUpTime 1.3.6.1.2.1.1.3

[root@aliyun ~]# cat /etc/snmp/snmpd.conf
rocommunity kolor 172.18.203.141 
[root@aliyun ~]# snmpget -v2c -c kolor 172.18.203.141  1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2289) 0:00:22.89

重要!运维监控知识总结_第3张图片

如:1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
[root@aliyun ~]# snmpget -v2c -c kolor 172.18.203.141 1.3.6.1.4.1.2021.10.1.3.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.02

3、Get-request 和 Get-next-request
( 1 ) get-request 操作:从代理进程处提取一个或多个参数值。
( 2 ) get-next-request 操作:从代理进程处提取一个或多个参数的下一个参数值。

snmpwalk实现了调用get-next-request,直接获取到1分钟、5分钟、15分钟的负载情况
重要!运维监控知识总结_第4张图片

查看服务器当前连接:
重要!运维监控知识总结_第5张图片

 

2.系统监控

  • CPU
  • 内存
  • IO Input/Output(网络、磁盘)

(1)CPU

CPU有三个重要的概念:

  • 上下文切换:CPU调度器实施的进程的切换过程,上下文切换
  • 运行队列(负载)
  • 使用率

top命令

3.1%us【user space】— 用户空间占用CPU的百分比。
3.1%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
93.8%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比

确定服务类型:

  • IO密集型 数据库
  • CPU密集型 web、mail

确定性能基准:

  • 运行队列:1-3线程,1个CPU有4核,负载不超过12
  • CPU使用:
    65%~70% 用户态利用率
    30%~35% 内核态利用率
    0%~5% 空闲
  • 假如在一个单核机器上,load average是"1.73 0.60 7.98",那么可以大致这么解释:
    在过去1分钟中,系统负载超额73%。(1.73个runnable进程,但是有0.73个进程需要等待)
    在过去5分钟中,系统负载有40%空闲
    在过去15分钟中,系统负载超额698%。(7.98个runnable进程,但是有6.98个需要等待

CPU的两种工作状态:内核态和用户态(或者称管态和目态)
内核态

  • 系统中既有操作系统的程序,也由普通用户的程序。为了安全和稳定性操作系统的程序不能随便访问,这就是内核态
    内核态可以使用所有的硬件资源

用户态

  • 不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间

 

top命令详解

按P,按照进程的CPU使用率排序
按M,按照进程的内存使用率排序

重要!运维监控知识总结_第6张图片
第一行,任务队列信息,同 uptime 命令的执行结果
系统时间:21:11:19
运行时间:up 38 days,
当前登录用户: 1 user
负载均衡(uptime) load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行,Tasks — 任务(进程)

系统现在共有多少个进程,其中处于运行中的有多少个,多少个在休眠(sleep),停止状态的有几个,僵尸状态的有0个。

总进程:137 total, 运行:1 running, 休眠:136 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息

3.1%us【user space】— 用户空间占用CPU的百分比。
3.1%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
93.8%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行,内存状态
3880200 total,220984 free, 711236 used, 2947980 buffers【缓存的内存量】

第五行,swap交换分区信息
备注:

可用内存=free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

第六行,空行

第七行以下:各进程(任务)的状态监控

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

 

vmstat命令详解

vmstat命令,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 3498472 315836 3819540    0    0     0     1    2    0  0  0 100  0
 
2表示每隔两秒采集一次服务器状态,1表示只采集一次。
r     表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b     表示阻塞的进程,这个不多说,进程阻塞,等待IO请求完成

swpd  虚拟内存(swap)已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free  空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff  Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si    每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so    每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi    块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo    块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
假如 bi,bo 长期不等于 0,表示物理内存容量太小


in    每秒CPU的中断次数,包括时间中断

cs    每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us    用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy    系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id    空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt    等待IO CPU时间。

iostat命令详解

用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]

常用选项说明:
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出
说明:更多选项使用使用man iostat查看

1、iostat,结果为从系统开机到当前执行时刻的统计信息
输出含义:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。

Device: 各磁盘设备的IO统计信息。各列含义如下:

Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
KB_read/s: 每秒从驱动器读入的数据量,单位为K。
KB_wrtn/s: 每秒从驱动器写入的数据量,单位为K。
KB_read: 读入数据总量,单位为K。
KB_wrtn: 写入数据总量,单位为K。

 

[root@aliyun ~]# iostat
Linux 3.10.0-957.21.3.el7.x86_64 (aliyun) 	11/09/2020 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.36    0.00    1.04    0.02    0.00   93.58

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               1.29         0.42        12.71     838989   25343637

2、iostat -x -k -d 1 2。每隔1S输出磁盘IO的详细详细,总共采样2次。
在这里插入图片描述
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

重点关注参数

  1. iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
  2. avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
  3. await 表示每次IO请求等待时间,包括等待时间和处理时间
  4. svctm 表示每次IO请求处理的时间
  5. %util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。

疑惑:dm-0/1/2是什么?怎么来的?
重要!运维监控知识总结_第7张图片

(2)内存

  • free、vmstat

OMM机制

free命令详解

[root@aliyun ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3789        1073         234           1        2481        2412
Swap:             0           0           0

[root@aliyun ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.0G        234M        1.5M        2.4G        2.4G
Swap:            0B          0B          0B


有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:
free -h -s 3
上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。

输出简介
下面先解释一下输出的内容:
Mem 行(第二行) 是内存的使用情况。
Swap 行(第三行) 是交换空间的使用情况。
total 列 显示系统总的可用物理内存和交换空间大小。
used 列 显示已经被使用的物理内存和交换空间。
free 列 显示还有多少物理内存和交换空间可用使用。
shared 列 显示被共享使用的物理内存大小。
buff/cache 列 显示被 buffer 和 cache 使用的物理内存大小。
available 列 显示还可以被应用程序使用的物理内存大小。

buff/cache
缓存cache是用来加速从硬盘中读取数据的。一个程序读取了一个数据,先放在缓存里,下一个程序再来需要的时候,直接调用缓存即可,因为很显然内存的存取速度要大于硬盘。

缓冲buffer是用来加速向硬盘写入数据的,保存数据到硬盘,不是立刻生效,而是在内存缓冲积累到一定程度后,再全部放入硬盘,避免硬盘被频繁操作,从而影响系统的运行情况。

写数据到内存里,这个数据的内存空间称为缓冲区(buffer),写入到内存缓冲区
从内存读取数据,这个存数据的内存空间称为缓存区(cache),从内存读取缓存区

CPU ===> 内存 =>磁盘 (buffer)
CPU <
= 内存 <===磁盘 (cache)

free 与 available
在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

vmstat也可以

(3)硬盘

顺序IO 快、随机IO 慢

  • 监控磁盘分区:df -h
  • 监控磁盘IO:iotop、iostat

安装:yum install iotop
测试:dd if=/dev/zero of=/tmp/1.file bs=1M count=1000
if,从zero空文件来
of,目的文件
bs,块大小
count,数量
dd if 详解:https://blog.csdn.net/qq_33160790/article/details/77488160

1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd if=/dev/hdb of=/dev/hdd
2./dev/hdb全盘数据备份到指定路径的image文件
#dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
#dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512
   count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
#dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分

重要!运维监控知识总结_第8张图片

iostat 详解

 

(4)网络

  • iftop、带宽、通常情况丢包ping
  • 阿里测、奇云测、站长工具

iftop命令详解

iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等

重要!运维监控知识总结_第9张图片

相关参数及说明

1、iftop界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

iftop 的输出从整体上可以分为三大部分:

  • 第一部分。是 iftop 输出中最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。
  • 第二部分。是 iftop 输出中最大的一个部分,此部分又分为左、中、右三列,左列和中列记录了哪些 IP 或主机正在和本机的网络进行连接。其中,中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个 IP 之间的通信情况。最右列又分为三小列,这些实时参数分别表示外部 IP 连接到本机 2 秒内、10 秒内和 40 秒内的平均流量值。另外,这个部分还有一个流量图形条,流量图形条是对流量大小的动态展示,以第一部分中的流量刻度为基准。通过这个流量图形条可以很方便地看出哪个 IP 的流量最大,进而迅速定位网络中可能出现的流量问题。
  • 第三部分位于 iftop 输出的最下面,可以分为三行,其中,“TX”表示发送数据,“RX”表示接收数据,“TOTAL”表示发送和接收全部流量。与这三行对应的有三列,其中“cum”列表示从运行 iftop 到目前的发送、接收和总数据流量。“peak”列表示发送、接收以及总的流量峰值。“rates”列表示过去 2s、10s、40s 的平均流量值。

2、iftop相关参数
常用的参数

-i 设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n 使host信息默认直接都显示IP,如:# iftop -n
-N 使端口信息默认直接都显示端口号,如: # iftop -N
-P 使host信息及端口信息默认就都显示;
-F 显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2/1/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;123可以根据右侧显示的三列流量数据进行排序;<根据左边的本机名或IP排序;>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

iftop 的强大之处在于它能够实时显示网络的流量状态,监控网卡流量的来源 IP 和目标地址,这对于检测服务器网络故障、流量异常是非常有用的,只需通过一个命令就能把流量异常或网络故障的原因迅速定位,因此对于运维人员来说,iftop 命令是必不可少的一个网络故障排查工具

3.应用监控

  • nginx处理多少链接
yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel

cd /usr/src/local
wget https://nginx.org/download/nginx-1.10.1.tar.gz
tar zxvf nginx-1.10.1.tar.gz

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --user=www
make && make install

ln -s /usr/local/nginx-1.10.1/ /usr/local/nginx

语法检查:/usr/local/nginx/sbin/nginx -t

监控宝:https://help.cloudwise.com/help/18/21/48

server {
	 location /nginx-status
	 {
	    stub_status on;
	    access_log  off;
	    allow 192.168.1.0/24;
	    deny all;
	 }
}

重要!运维监控知识总结_第10张图片
 

在浏览器中输入nginx的地址:http://127.0.0.1/status,即可查看nginx的状态信息
在这里插入图片描述
Active connections – 活跃的连接数量
server accepts handled requests — 总共处理了7个连接 , 成功创建7次握手, 总共处理了36个请求。
reading — 读取客户端的连接数。
writing — 响应数据到客户端的数量。
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

 

❤Zabbix

  • 官网:https://www.zabbix.com/documentation/4.0/zh/manual
  • Zabbix Proxy 分布式监控(多机房,减轻压力)
    zabbix-server ——》 zabbix proxy ——》 zabbix agent
  • Zabbix API

目录:

  • Zabbix概述
  • Zabbix部署
  • 添加被监控主机
  • Web页面配置
  • 告警
  • 监控案例
  • 自动化监控
  • Grafana展示Zabbix监控数据

第1章 Zabbix概述

1.Zabbix是什么?
Zabbix是一款企业级的分分布式开源监控方案。能够监控服务器,网络设备,应用程序等对象。所有的报告、统计信息和配置参数都可以通过Web前端页面访问。

2.Zabbix功能?

  • 数据采集
    重要!运维监控知识总结_第11张图片

3.Zabbix监控范畴

  • 硬件:Zabbix IPMI Interface
  • 系统:Zabbix Agent Interface
  • Java:Zabbix JMX Interface
  • 网络设备:Zabbix SNMP Interface
  • 应用服务:Zabbix Agent UserParameter
  • URL:Zabbix Web监控.

4.Zabbix组件和架构
https://www.bilibili.com/video/BV1Wa4y147wG?p=6

  • Zabbix Server
  • Zabbix Agent(执行 agent被动和主动)
    被动:Zabbix server(或者proxy)询问agent数据,如CPU负载情况,然后Zabbix agent回送结果
    主动:Agent必须首先从Zabbix server索取监控项列表以进行独立处理,然后周期性地发送新的值给server
  • Zabbix Proxy,可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix server的进程,基本上是代表server工作的。所有的收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix server。同时,如果只有proxy收集数据,server上的进程就会减少CPU消耗和磁盘IO负载。
  • Java gateway,接受来自Server和Agent的传入连接,也可以当做“被动proxy”,查询特定的监控项值,而且Java gateway不会缓存任何值
  • Sender,命令行工具,将性能数据发送到Server进行处理,用于定期发送可用性和性能数据。而不通过Agent
  • Get,命令工具,用于与Agent进行通信,并从agent那里获取所需的信息,该应用通常被用于agent故障排除

重要!运维监控知识总结_第12张图片

5.Zabbix术语

主机(host)

  • 你想要监控的联网设备,有IP/DNS。

主机组(host group)

  • 主机的逻辑组;可能包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

监控项(item)

  • 你想要从主机接收的特定数据,一个度量(metrics)/指标数据。

值预处理(value preprocessing)

  • 存入数据库之前,转化/预处理接收到的指标数据

触发器(trigger)

  • 触发器是一个逻辑表达式,用来定义问题阈值和“评估”监控项接收到的数据。
    当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回“OK”的状态。

事件(event)

  • 发生的需要注意的事件,例如触发器状态改变、自动发现/监控代理自动注册

事件标签(event tag)

  • 提前设置的事件标记,可以用于事件关联,权限细化设置等。

事件关联(event correlation)

  • 自动灵活的、精确的关联问题和解决方案
    比如说,你可以定义触发器A告警的异常可以由触发器B解决,触发器B可能采用完全不同的数据采集方式。

异常(problems)

  • 处在“异常”状态的触发器

异常状态更新(problem update)

  • Zabbix提供的异常管理选项,例如添加评论、确认异常、改变严重级别或者手动关闭等。

动作(action)

  • 预先定义的应对事件的动作
    一个动作由操作(例如发出通知)和条件(什么时间进行操作)组成

升级(escalation)

  • 用户自定义的一个在动作(action)内执行操作的场景; 发送通知/执行远程命令的序列。

媒介(media)

  • 发送告警通知的方式、途径

告警通知(notification)

  • 通过预先设定好的媒介途径发送事件信息给用户。

远程命令(remote command)

  • 预定义好的,满足特定条件的情况下,可以在被监控主机上自动执行的命令。

模版(template)

  • 被应用到一个或多个主机上的一整套实体组合(如监控项,触发器,图形,聚合图形,应用,LLD,Web场景等)。
    模版的应用使得主机上的监控任务部署快捷方便;也可以使监控任务的批量修改更加简单。模版是直接关联到每台单独的主机上。

应用(application)

  • 监控项的逻辑分组

Web场景(web scenario)

  • 检查网站可浏览性的一个或多个HTTP请求

前端(frontend)

  • Zabbix提供的web界面

仪表板(dashboard)

  • 自定义的web前端模块中,用于重要的概要和可视化信息展示的单元, 我们称之为组件(widget)。

组件(widget)

  • Dashboard中用来展示某种信息和数据的可视化组件(概览、map、图表、时钟等)。

Zabbix API

  • Zabbix API允许用户使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图表等)信息或者执行任何其他的自定义的任务

Zabbix server

  • Zabbix软件的核心进程,执行监控操作,与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;也是数据的中央存储库

Zabbix agent

  • 部署在监控对象上的进程,能够主动监控本地资源和应用

Zabbix proxy

  • 代替Zabbix Server采集数据,从而分担Zabbix Server负载的进程

加密(encryption)

  • 使用TLS(Transport Layer Security )协议支持Zabbix组建之间的加密通讯(server, proxy, agent, zabbix_sender 和 zabbix_get工具) 。

网络自动发现(network discovery)

  • 网络设备的自动发现。

低级别自动发现(low-level discovery)

  • 特定设备上低级别实体的自动发现(如文件系统、网络接口等)。

低级别自动发现规则(low-level discovery rule)

  • 为自动发现设备中低级别实体设定的一系列规则。

监控项原型(item prototype)

  • 有特定变量的指标,用于自动发现。. 低级别自动发现执行之后,该变量将被实际自动发现的参数替换,该指标也自动开始采集数据。

触发器原型(trigger prototype)

  • 有特定参数作为变量的触发器,用于自动发现。自动发现执行后该变量将被实际自动发现的参数替换,该触发器自动开始计算数据。

还有其他的一些Zabbix 实体原型也被用于自动发现中——图表原型,主机原型,主机组原型,应用原型。

agent自动注册(agent auto-registration)

  • Zabbix agent自己自动注册为一个主机,并且开始监控的自动执行进程。

第2章 Zabbix部署

1.安装要求
2.部署Zabbix服务端
3.用户和用户组

部署MySQL
YUM部署Zabbix服务器

  1. yum install zabbix-server-mysql zabbix-web-mysql
  2. 初始化数据库
  3. Zabbix Server配置
  4. Zabbix Web配置

源码编译部署Zabbix服务器

  1. 部署Nginx
  2. 部署PHP
  3. 初始化数据库
  4. 部署Zabbix Server
  5. 部署Zabix Server

YUM部署Zabbix服务器

1.安装MySQL
部署文档:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

# yum -y install yum-utils
# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
默认启用的是MySQL 8.0
# yum-config-manager --disable mysql80-community
# yum-config-manager --enable mysql57-community
# yum install mysql-community-server
# systemctl start mysqld
# systemctl status mysqld
# grep 'temporary password' /var/log/mysqld.log
# mysql -uroot -p

初始化
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zabbix2020@';
# vi /etc/my.cnf
[mysql]
socket = /tmp/mysql.sock
[mysqld]
user = mysql
port = 3306
datadir = /var/lib/mysql
socket = /tmp/mysql.sock
bind-address = 0.0.0.0
pid-file = /var/run/mysqld/mysqld.pid
character-set-server = utf8
collation-server = utf8_general_ci
log-error = /var/log/mysqld.log
max_connections = 10240
open_files_limit = 65535
innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M

# systemctl restart mysqld

2.YUM方式部署Zabbix服务器

# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# yum install zabbix-server-mysql zabbix-web-mysql
# yum install zabbix-agent
# mysql -uroot -p
mysql> create database zabbix;
mysql> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'Zabbix2020@';

导入表结构和数据:
# cd /usr/share/doc/zabbix-server-mysql-4.0.26
# zcat create.sql.gz | mysql -uroot -p zabbix

启动Zabbix Server进程
配置数据库
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix2020@
DBSocket=/tmp/mysql.sock
# systemctl start zabbix-server

# vi /etc/httpd/conf.d/zabbix.conf
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
# systemctl start httpd

重要!运维监控知识总结_第13张图片

重要!运维监控知识总结_第14张图片

重要!运维监控知识总结_第15张图片
重要!运维监控知识总结_第16张图片
问题一:
遇到的错误:Error connecting to database: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
解决:
方案一:
localhost 改为 127.0.0.1就好了,同时vi /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1
或者
方案二:
vim /etc/my.cnf
修改socket为:/var/lib/mysql/mysql.sock,然后重启数据库
vi /etc/zabbix/zabbix_server.conf
DBSocket=/var/lib/mysql/mysql.sock

问题而:
https://blog.csdn.net/Thanlon/article/details/106237953

  1. Please create database manually, and set the configuration parameters for connection to this database. Press “Next step” button when done.
    问题来源:连接mysql的时候总是连接不上
    解决方法:创建zabbix数据库的时候应该这样创建:create database zabbix character set utf8 collate utf8_bin; 重新导入数据

登录,默认用户名Admin,默认密码zabbix
重要!运维监控知识总结_第17张图片

重要!运维监控知识总结_第18张图片

 

源码编译方式部署Zabbix服务器

3.源码编译方式部署Zabbix服务器

3.1 部署Nginx

# wget http://nginx.org/download/nginx-1.15.3.tar.gz
# yum install gcc pcre-devel openssl-devel -y
# useradd -M -s /sbin/nologin nginx
# tar zxvf nginx-1.15.3.tar.gz
# cd nginx-1.15.3
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
# make && make install
# chown nginx -R /usr/local/nginx/
# vi /usr/local/nginx/conf/nginx.conf
pid		/var/run/nginx.pid;
# vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target.network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl start nginx

3.2 部署PHP
安装依赖包:

# yum install -y gcc  gcc-c++ make gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel libxslt-devel

安装PHP:

# wget http://docs.php.net/distributions/php-5.6.36.tar.gz
# tar zxvf php-5.6.36.tar.gz
# cd php-5.6.36
# ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --enable-opcache \
--with-mysql --with-mysqli \
--enable-session --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--enable-mbstring --enable-xmlwriter --enable-xmlreader \
--enable-xml --enable-sockets --enable-bcmath --with-gettext
# make -j 2 && make install
# cp php.ini-production /usr/local/php/etc/php.ini
# cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf
# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
# vi /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.traget
[root@localhost `]# systemctl daemon-reload
# systemctl start php-fpm
# systemctl enable php-fpm

3.3 部署Zabbix Server
https://www.zabbix.com/cn/download_sources#tab:40LTS

# wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.25.tar.gz
# tar zxvf zabbix-4.0.25.tar.gz
# mysql -uroot -p
mysql> create database zabbix_src;
mysql> grant all on zabbix_src.* to 'zabbix_src'@'localhost' identified by 'Zabbix2020@';

导入表结构和数据:
# cd zabbix-4.0.25/database/mysql/
# mysql -uzabbix_src -p'Zabbix2020@' zabbix_src < schema.sql
# mysql -uzabbix_src -p'Zabbix2020@' zabbix_src < images.sql
# mysql -uzabbix_src -p'Zabbix2020@' zabbix_src < data.sql

# yum install libxml2-devel libcurl-devel libevent-devel net-snmp-devel mysql-community-devel -y
# groupadd zabbix
# useradd -g zabbix zabbix -s /sbin/nologin
# cd zabbix-4.0.25
# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
# make install
# vi /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost
DBName=zabbix_src
DBUser=zabbix_src
DBPassword=Zabbix2020@
DBSocket=/tmp/mysql.sock

# vi /usr/lib/systemd/system/zabbix_server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

启动Zabbix
# systemctl start zabbix_server

Server上启动Agent
# /usr/local/zabbix/sbin/zabbix_agentd

3.4 部署Zabbix Web界面
Zabbix前端使用PHP写的,所以必须运行在PHP支持的Web服务器上。

# cp zabbix-4.0.25/frontends/php/* /usr/local/nginx/html/ -rf
# vi /usr/local/php/etc/php.ini
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
(有分号的要去掉)

# systemctl restart php-fpm
# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root   html;
            fastcgi_pass	127.0.0.1:9000;
            fastcgi_index	index.php;
            fastcgi_param	SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include			fastcgi_params;
        }
    }

问题一:nginx: [emerg] unknown log format “main” in /usr/local/nginx/conf/nginx.conf
解决办法:
打开nginx.conf,"main"错误是因为丢失了log_format选项,之前把他屏蔽掉了,修改之后问题解决。
打开IP地址直接访问到安装页面,因为上面已经设置好server,无需再加Zabbix

问题二:Please create database manually, and set the configuration parameters for connection to this database. Press “Next step” button when done.
问题来源:连接mysql的时候总是连接不上
解决方法:创建zabbix数据库的时候应该这样创建:create database zabbix character set utf8 collate utf8_bin; 重新导入数据

问题三:Cannot create the configuration file.
报错:
重要!运维监控知识总结_第19张图片
解决:点击Download the configuration file
vim /usr/local/nginx/html/conf/zabbix.conf.php
或者
设置 web服务器用户在zabbix网页的conf/目录具有写权限,配置文件会自动保存。

<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = '127.0.0.1';
$DB['PORT']     = '3306';
$DB['DATABASE'] = 'zabbix_src';
$DB['USER']     = 'zabbix_src';
$DB['PASSWORD'] = 'Zabbix2020@';

// 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;

重要!运维监控知识总结_第20张图片

重要!运维监控知识总结_第21张图片

重要!运维监控知识总结_第22张图片
重要!运维监控知识总结_第23张图片
重要!运维监控知识总结_第24张图片

报错:写权限
重要!运维监控知识总结_第25张图片

重要!运维监控知识总结_第26张图片
重要!运维监控知识总结_第27张图片

第3章 添加被监控主机

  • 部署Zabbix Agent
  • 连通性测试
  • 主机、监控项、触发器和图形

1、部署Zabbix Agent
后期可以通过Ansible部署Agent

# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# yum -y install zabbix-agent
# vi /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
DebugLevel=3
Server=10.0.100.132
ListenPort=10050
ListenIP=10.0.100.134
ServerActive=10.0.100.132   # 主动向server发起的地址
Hostname=10.0.100.134  # 注意这里要和Zabbix创建主机名称一致
Include=/etc/zabbix/zabbix_agentd.d/*.conf

# systemctl start zabbix-agent

2、Server与Agentd连通性测试
[root@Zabbix-Server ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.100.134 -p 10050 -k “system.cpu.load[all,avg1]”

在这里插入图片描述

3、创建主机、监控项、触发器、图形和模板

重要!运维监控知识总结_第28张图片

创建的案例都可以在模板中找到对应的

 
①创建主机
重要!运维监控知识总结_第29张图片
 
②创建监控项
重要!运维监控知识总结_第30张图片
 
③创建图形
重要!运维监控知识总结_第31张图片
重要!运维监控知识总结_第32张图片

 
④创建触发器
重要!运维监控知识总结_第33张图片
 
⑤创建模板

监控类型 模板对象
服务监控 TemplateApp HTTP Service
TemplateApp HTTPS Service
TemplateApp SSHService
TemplateApp Telnet Service
TemplateApp ICMP Service
硬件资源监控 TemplateApp OS Linux
TemplateApp OS Windows
数据库监控 TemplateApp DB MySQL
网络设备监控 TemplateModule InterfacesSNMPv2
TemplateNet Network Generic DevicesSNMPv2

添加Linux模板,主机那个选择也要更新。最终才会显示
重要!运维监控知识总结_第34张图片

在这里插入图片描述

 

监控项补充

重要!运维监控知识总结_第35张图片

用户自定义参数
在agent端设置

[root@Zabbix-Agentd ~]# vim /etc/zabbix/zabbix_agentd.conf
[root@Zabbix-Agentd ~]# systemctl restart zabbix-agent

第一个实验测试

简单的命令:
UserParameter=echo-test,echo 123



一个更复杂的例子
UserParameter=mysql.ping,mysqladmin -uroot ping | grep -c alive
如果MySQL服务器是活动状态,代理将返回“1”,否则为0

在server进行测试
[root@Zabbix-Server ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.100.134 -p 10050 -k “echo-test”
123

第二个实验测试
Agent的 zabbix_agentd.conf
UserParameter=echo-test[*],echo $(($1+$2))

Server验证:
在这里插入图片描述

第三个实验测试
vim /tmp/up.sh
chmod +x /tmp/up.sh

if [ $1 == "available" ];then
	echo 123
elif [ $1 == "used" ];then
	echo 456
fi

vim /etc/zabbix/zabbix_agentd.conf
key是唯一的,不能重复。
`UserParameter=vm.memory.size2[*],/bin/bash /tmp/up.sh $1

测试图:
在这里插入图片描述
 

触发器补充

一个简单有效的表达式看起来像::
{:.()}
{10.0.100.134:vm.memory.size[total].last()}<20G

示例1:来自www.zabbix.com主机的最后一次负载值大于5时进入PROBLEM状态
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5

示例2:在5分钟内CPU iowait平均负载大于20时进入PROBLEM状态
{www.zabbix.com:system.cpu.util[,iowait].avg(5m)}>20

示例3:当负载大于5或者最近10分钟内负载大于2时进入PROBLEM状态
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5 or {www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2

示例4:当文件/etc/passwd检查的checksum值与最近的值不同时进入PROBLEM状态
{www.zabbix.com:system.vfs.file.cksum[/etc/passwd].diff()}=1

示例5:当网卡“eth0”在5分钟内接收的字节大于100KB时进入PROBLEM状态
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

示例6:在30分钟内超过5次不可达时进入PROBLEM状态
{zabbix.zabbix.com:net.icmping.count(30m,0)} > 5

示例7:在5分钟内未收到数据进入PROBLEM状态
{zabbix.zabbix.com:agent.ping.nodata(5m)} = 1

 

第4章 告警

  • Action动作
  • 邮件告警
  • 自定义脚本告警
  • 钉钉告警

根据支持的事件源定义操作:

  • 触发事件-当trigger的状态从OK转到PROBLEM或者转回时
  • 发现事件-发生网络发现时
  • 自动注册事件-当新的活动代理自动注册
  • 内部事件-当项目不受支持或触发器进入未知状态

1、邮件告警

①配置——》动作——》创建动作——》触发条件
重要!运维监控知识总结_第36张图片

②配置——》动作——》创建操作——》可设置指定的媒介类型
③管理——》报警媒介类型——》设置媒介账号和密码
④管理——》用户——》报警媒介——》设置收件人账号
重要!运维监控知识总结_第37张图片
⑤设置触发器

在这里插入图片描述

⑥查看验证
Login denied: Authentication failed: 535
因为发邮件的是授权码,而不是普通的密码

在这里插入图片描述

重要!运维监控知识总结_第38张图片

⑦将邮件信息格式化一下
配置——》动作——》操作

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

重要!运维监控知识总结_第39张图片

验证:
重要!运维监控知识总结_第40张图片

2、自定义脚本告警

步骤:编写通知脚本——》创建媒体类型——》用户指定媒介类型

①配置邮件信息

# yum -y install mailx
# vi /etc/mail.rc # 添加邮件信息
set from=123qq.com smtp=smtp.qq.com
set smtp-auth-user=123@qq.com smtp-auth-password=hxxxx
set smtp-auth=login
# echo "this is test mail." | mail -s "test mail" [email protected]

②编写告警脚本
Zabbix找到告警脚本的位置可进行设置:
[root@Zabbix-Server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=

# vim /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh
#! /bin/bash
to=$1
subject=$2
body=$3
FILE=/tmp/mail.tmp
echo "$body" > $FILE
dos2unix -k $FILE  # 解决正文变成附件.bin
mail -s "$subject" "$to" < $FILE

# yum -y install dos2unix
# chmod +x /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh
# ./sendmail.sh [email protected] zabbix "zabbix test"
Zabbix提供参数进行传参,收件人,主题,正文

给予mail.tmp,Zabbix权限
# chown zabbix.zabbix /tmp/mail.tmp

重要!运维监控知识总结_第41张图片

③创建媒体类型
管理——》报警媒介类型——》场景
重要!运维监控知识总结_第42张图片

④用户指定媒介类型
管理——》用户——》报警媒介类型设置
重要!运维监控知识总结_第43张图片

⑤配置——》动作 设置好
配置——》主机——》触发器条件设置
等待1~2分钟

⑥测试验证
重要!运维监控知识总结_第44张图片

3、钉钉告警

步骤:钉钉自定义机器人——》编写通知脚本——》创建媒体类型——》用户指定媒介类型

文档:钉钉开发文档
重要!运维监控知识总结_第45张图片

 
①钉钉是基于群聊去通知的,添加机器人
重要!运维监控知识总结_第46张图片
https://oapi.dingtalk.com/robot/send?access_token=d27fa26b37655bcc1503294e9eb2ede3212a94969fc4adc42de1537d16a72b9e

②编写通知脚本
[root@Zabbix-Server ~]# vim /usr/local/zabbix/share/zabbix/alertscripts/dingding.py
[root@Zabbix-Server ~]# chmod +x /usr/local/zabbix/share/zabbix/alertscripts/dingding.py
[root@Zabbix-Server ~]# yum install python-requests

dingding.py

#! /usr/bin/python
import requests
import json
import sys
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=d27fa26b37655bcc1503294e9eb2ede3212a94969fc4adc42de1537d16a72b9e"

def msg(text):
	json_text= {
		"msgtype": "text",
		"text": {
			"content": text
		},
		"at": {
			"atMobiles": [
				"186..."
			],
			"isAtAll": False
		}
	}
	print requests.post(api_url,json.dumps(json_text),headers=headers).content

if __name__ == '__main__':
	text = sys.argv[1]
	msg(text)

[root@Zabbix-Server ~]# cd /usr/local/zabbix/share/zabbix/alertscripts/
[root@Zabbix-Server alertscripts]# chmod +x dingding.py
[root@Zabbix-Server alertscripts]# ./dingding.py test
{“errcode”:310000,“errmsg”:“keywords not in content, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]”}
报错原因:我自定义钉钉的时候设置了关键字zabbix才触发
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

[root@Zabbix-Server alertscripts]# ./dingding.py zabbix-test
在这里插入图片描述

重要!运维监控知识总结_第47张图片

③创建媒体类型
重要!运维监控知识总结_第48张图片

④用户指定媒介类型
重要!运维监控知识总结_第49张图片
⑤触发器更新
⑥钉钉验证
重要!运维监控知识总结_第50张图片

 

第5章 监控案例

1、监控Web

监控指标

  • 平均下载速度
  • 响应时间
  • HTTP状态码

步骤:
创建模板:A ——》 在模板A中:创建Web scenarios ——》在模板A中:创建Triggers ——》主机关联模板A

①创建模板
重要!运维监控知识总结_第51张图片
 
②创建Web场景,设置访问头,IE11
场景:
重要!运维监控知识总结_第52张图片

步骤:
重要!运维监控知识总结_第53张图片

 
③主机应用到该模板
重要!运维监控知识总结_第54张图片

④测试验证
重要!运维监控知识总结_第55张图片

⑤字体乱码调整

1.从windows下控制面板->字体->选择一种中文字库例如“楷体”,simkai.ttf
2.把它拷贝到zabbix的web端的fonts目录下例
/usr/local/nginx/html/assets/fonts/simkai.ttf

这种是YUM路径下的
/usr/share/zabbix/assets/fonts/simkai.ttf

3.修改配置文件
[root@Zabbix-Server ~]# vim /usr/local/nginx/html/include/defines.inc.php
define('ZBX_FONT_NAME', 'simkai');
define('ZBX_GRAPH_FONT_NAME',           'simkai'); // font file name

这种是YUM路径下的
# vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_FONT_NAME', 'simkai');
define('ZBX_GRAPH_FONT_NAME',           'simkai'); // font file name

PS补充:

YUM方式安装:

这里一定要注意是ttf格式,而不是ttc哦。 通过mv命令修改
mv /tmp/MSYH.ttf /usr/share/zabbix/assets/fonts/
vim /usr/share/zabbix/include/defines.inc.php
找到两个FONT_NAME所在的位置

zabbix 4.2/usr/share/zabbix/assets/fonts/
zabbix 4.0/usr/share/zabbix/fonts/

重要!运维监控知识总结_第56张图片

 

2、监控Tomcat

监控指标:

  • 堆内存
  • 类加载
  • 线程
  • GC

步骤:
1.Tomcat开启JMX远程连接
2.安装Zabbix Java gateway并配置
3.将主机关联模板

前提:安装JDK。yum install -y java-1.8.0-openjdk.x86_64
java -version

客户机通过这种方式无需安装agentd,通过java gateway
我这里均在Server完成

①客户机Tomcat开启JMX远程连接
进入Tomcat/bin目录,修改catalina.sh,找到如下内容"#— - Execute The Requested Command",在其上方添加以下配置,此配置不需要用户名、密码

CATALINA_OPTS="
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=10.0.100.132
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

第一行:开启JMX远程连接
第二行:ip是你要监控的tomcat所在服务器的ip地址,当前IP
第三行:JMX开启的端口号,是你要开启的监控端口号。
第四行:ssl,false表示不使用ssl链接
第五行:authenticate,false表示不使用监控,即不需要用户名和密码

执行startup.sh报错,Dcom.sun.management.jmxremote: 未找到命令
-Djava.rmi.server.hostname=10.0.100.132: 未找到命令

/usr/local/jdk1.8/jdk1.8.0_201//bin/java: 没有那个文件或目录
创建软链接,再不行就卸载重新安装。 yum install java-1.8.0-openjdk* -y

重新安装JDK:
jdk-8u211-linux-x64.tar.gz下载
链接:https://pan.baidu.com/s/19Eg67jW6V5XkDAfYQ0lxhA?errmsg=Auth+Login+Sucess&errno=0&ssnerror=0&
提取码:6r5f

解压:
# tar zxvf /root/jdk-8u211-linux-x64.tar.gz
# mv jdk1.8.0_211/ /usr/local/java/

设置环境变量
追加下列内容到 
# vim /etc/profile
export JAVA_HOME=/usr/local/java
export TOMCAT_HOME=/usr/local/tomcat
export JRE_HOME=/usr/local/java/jre
export PATH=$TOMCAT_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# source /etc/profile
[root@Zabbix-Server ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

[root@Zabbix-Server bin]# pwd
/usr/local/tomcat/bin
[root@Zabbix-Server bin]# vim catalina.sh 
CATALINA_OPTS='-Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=9999    ##监听端口号,方便远程访问
  -Dcom.sun.management.jmxremote.ssl=false     ##是否对连接开启SSL加密,默认开启
  -Dcom.sun.management.jmxremote.authenticate=false    ##是否需要开启用户认证,默认开启
  -Djava.rmi.server.hostname=10.0.100.132'
[root@Zabbix-Server bin]# sh startup.sh
[root@Zabbix-Server bin]# netstat -nltp | grep 9999

重要!运维监控知识总结_第57张图片

 
②服务器安装启动配置Zabbix java gateway
源码编译的时候直接附带上就行
YUM安装的时候就yum install zabbix-java-gateway

如果要配置:vim /usr/local/zabbix/sbin/zabbix_java/settings.sh (这里实验无需动)

[root@Zabbix-Server ~]# cd /usr/local/zabbix/sbin/zabbix_java/
[root@Zabbix-Server zabbix_java]# sh startup.sh 
[root@Zabbix-Server zabbix_java]# ps -ef | grep java
root      34813      1  4 17:54 pts/1    00:00:01 java -server -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-4.0.25.jar -Dzabbix.pidFile=/tmp/zabbix_java.pid -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root      34858  33372  0 17:55 pts/1    00:00:00 grep --color=auto java
[root@Zabbix-Server zabbix_java]# netstat -antp | grep 10052
tcp6       0      0 :::10052                :::*                    LISTEN      34813/java 

配置zabbix连接gateway

[root@Zabbix-Server ~]# cd /usr/local/zabbix/etc/
[root@Zabbix-Server etc]# vi zabbix_server.conf
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
[root@Zabbix-Server etc]# systemctl restart zabbix_server

③主机关联模板
创建主机——》JMX接口
重要!运维监控知识总结_第58张图片

模板关联:Template App Generic Java JMX
重要!运维监控知识总结_第59张图片

点击更新后,等待一会观察JMX是否亮起
在这里插入图片描述

重要!运维监控知识总结_第60张图片

链接参考:https://blog.csdn.net/ht9999i/article/details/107470628

3、监控Nginx

监控指标:

active 当前活动的客户端连接数,包括waiting连接数
accepts 已接受的客户端连接数
handlled 已处理的连接总数
requests 客户端请求的总数
reading 正在读取请求头的当前连接数
writing 将响应写回客户端的当前连接数
waiting 等待请求空闲客户端的当前连接数

步骤:
1.编写监控数据采集脚本
2.创建模板
3.将运行Nginx的主机关联模板

这次分清服务端和客户机

①编写监控数据采集脚本
1、先进行测试

客户机启动zabbix-agent
[root@Zabbix-Agentd ~]# systemctl status zabbix-agent

服务端测试连通性
[root@Zabbix-Server bin]# /usr/local/zabbix/bin/zabbix_get -s 10.0.100.134 -p 10050 -k 'system.hostname'
Zabbix-Agentd
[root@Zabbix-Agentd ~]# vim /etc/nginx/nginx.conf
    server {
        listen 8080;
        server_name localhost;
        location /nginx_status {
           stub_status on;
           access_log off;
           allow 10.0.100.0/24;
           deny all;
        }
    }

[root@Zabbix-Agentd ~]# systemctl restart nginx
[root@Zabbix-Agentd ~]# curl http://10.0.100.134:8080/nginx_status
Active connections: 7 
server accepts handled requests
 11 11 16 
Reading: 0 Writing: 1 Waiting: 6 

2、编写监控数据采集脚本

[root@Zabbix-Agentd ~]# vi nginx_status.sh
#!/bin/bash
#active   当前活动的客户端连接数,包括waiting连接数
#accepts  已接受的客户端连接数
#handled  已处理的连接总数
#requests 客户端请求的总数
#reading  正在读取请求头的当前连接数
#writing  将响应写回客户端的当前连接数
#waiting  等待请求空闲客户端的当前连接数

result="/usr/bin/curl -s http://10.0.100.134:8080/nginx_status"
case $1 in
    active)
        $result |awk '/Active/ {print $NF}'
    ;;
    accepts)
        $result |awk 'NR==3 {print $1}'
    ;;
    handled)
        $result |awk 'NR==3 {print $2}'
    ;;
    requests)
        $result |awk 'NR==3 {print $3}'
    ;;
    reading)
        $result |awk '/Reading/ {print $2}'
    ;;
    writing)
        $result |awk '/Writing/ {print $4}'
    ;;
    waiting)
         $result |awk '/Waiting/ {print $6}'
    ;;
          *)
    echo "USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
esac


[root@Zabbix-Agentd ~]# sh nginx_status.sh active
1
[root@Zabbix-Agentd ~]# sh nginx_status.sh accepts
18
[root@Zabbix-Agentd ~]# mkdir -p /usr/local/zabbix_srcipts/
[root@Zabbix-Agentd ~]# mv nginx_status.sh /usr/local/zabbix_srcipts/nginx_status.sh

Agentd指定UserParameter

[root@Zabbix-Agentd ~]# vi /etc/zabbix/zabbix_agentd.conf 
[root@Zabbix-Agentd ~]# systemctl restart zabbix-agent
UserParameter=nginx.status[*],/usr/local/zabbix_srcipts/nginx_status.sh $1

Server进行测试
[root@Zabbix-Server bin]# /usr/local/zabbix/bin/zabbix_get -s 10.0.100.134 -p 10050 -k 'nginx.status[accepts]'
20

在这里插入图片描述

②创建模板
模板:
重要!运维监控知识总结_第61张图片
监控项:
重要!运维监控知识总结_第62张图片
创建图形
重要!运维监控知识总结_第63张图片

 
③将运行Nginx的主机关联模板
重要!运维监控知识总结_第64张图片

图形验证
在这里插入图片描述

监控项设置成7个,分别获取

 

4、监控MySQL

监控指标

  • 实例状态
  • 连接数
  • 流量
  • 增删改查
  • 缓冲池大小与利用率

步骤:
1.编写监控数据采集脚本
2.创建模板
3.将运行MySQL的主机关联模板

查询mysql最大连接数
mysql> show variables like '%max_connections%'   

获取当前的连接数
mysql> show global status where Variable_name='Threads_connected';

查询流量
mysql> show global status like '%byte%';

查询缓冲池
mysql> show global status like '%buffer_pool%';
得到Innodb_buffer_pool_pages_total

查询数量
mysql> show global status like '%select%';

1、编写监控数据采集脚本
mysql> grant all on zabbix.* to ‘zabbix’@‘localhost’ identified by ‘Zabbix2020@’;

mysql使用免密码登录
[root@Zabbix-Agentd ~]# vi /etc/my.cnf

[mysql]
host=127.0.0.1
user=zabbix
password=Zabbix2020@
[mysqladmin]
host=10.0.100.134
user=zabbix
password=Zabbix2020@

mysql -N -N 参数是不显示表头
userparameter_mysql.conf 放到Include目录,会自己加载

# 连接数
UserParameter=mysql.max_connections,echo "show variables where Variable_name='max_connections';" | mysql -N | awk '{print $2}'
UserParameter=mysql.current_connections,echo "show global status where Variable_name='Thread_connected';" | mysql -N | awk '{print $2}'
# 缓冲池 换算为G
UserParameter=mysql.buffer_pool_size,echo "show variables where Variable_name='innodb_buffer_pool_size';" | mysql -N | awk '{printf "%.2f",$2/1024/1024/1024}'
UserParameter=mysql.buffer_pool_usage_percent,echo "show global status where Variable_name='Innodb_buffer_pool_pages_free' or Variable_name='Innodb_buffer_pool_pages_total';" | mysql -N | awk '{a[NR]=$2}END{print "%.1f",100-((a[1]/a[2])*100)}'
# 增删改查,两个$,表示转义,输出"$2"
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | mysql -N | awk '{print $$2}'
# 实例状态
UserParameter=mysql.ping,mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

[root@Zabbix-Agentd ~]# mv userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/
mv:是否覆盖"/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf"? y
[root@Zabbix-Agentd ~]# systemctl restart zabbix-agent
重要!运维监控知识总结_第65张图片

Zabbix Server服务端进行测试
[root@Zabbix-Server ~]# /usr/local/zabbix/bin/zabbix_get -s 10.0.100.134 -p 10050 -k ‘mysql.status[uptime]’
3196

2、创建模板 (创建监控项,创建图形) —— 直接选了自带的
自带的MySQL Template,已经写好了监控项
重要!运维监控知识总结_第66张图片

3、将运行MySQL的主机关联模板
重要!运维监控知识总结_第67张图片

4、测试结果
重要!运维监控知识总结_第68张图片

重要!运维监控知识总结_第69张图片

5、监控TCP连接

监控指标(11种连接状态):

  • LISTEN
  • ESTABLISHED
  • SYN-SENT
  • SYN-RECE
  • TIME-WAIT
  • CLOSE-WAIT
  • FIN-WAIT-1
  • FIN-WAIT-2
  • CLOSE
  • LAST-ACK
  • CLOSING

步骤:
1.编写监控数据采集脚本
2.创建模板
3.将所有主机关联模板

1、编写监控数据采集脚本
[root@Zabbix-Agentd ~]# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=tcp.status[*],ss -antp | awk '{a[$$1]++}END{print a["'$1'"]}'
awk自身变量 和 引入的外部变量不一样,外部变量需要加两个双引号和一个单引号
$$是防止转义,$$1输出$1
[root@Zabbix-Agentd ~]# systemctl restart zabbix-agent

服务端测试:
在这里插入图片描述

2、创建模板
创建监控项、图形
TCP Connection status
重要!运维监控知识总结_第70张图片
重要!运维监控知识总结_第71张图片

重要!运维监控知识总结_第72张图片

3、将所有主机关联模板
重要!运维监控知识总结_第73张图片

重要!运维监控知识总结_第74张图片

❤第6章 自动化监控

1、10分钟如何监控100台服务器

两种情况:新采购100台服务器、已有100台服务器

新采购100台服务器

  • 1、安装操作系统(Centos7)
  • 2、初始化操作系统
  • 3、安装Zabbix.Agent
    ①手动部署
    ②脚本部署(shell expect交互)
    ③Ansible
  • 4、纳入监控
    ①主机分组(A机房,B机房)
    ②模板
    ③主机

已有100台服务器

  • 3、安装Zabbix Agent
    ①CentOS5.x(Python2.2)Ansible不支持 ——》使用脚本部署
    ②Ansible

网络发现:扫描预定网段
自动注册:Agent主动向Zabbix Server注册

2、网络发现

网络发现的好处:

  • 加快Zabbix部署
  • 简化管理
  • 无需过多管理就能在快速变化的环境中使用

Zabbix Zabbix网络发现基于以下信息:

  • IP范围
  • 可用的外部服务(FTP,SSH,WEB,POP3,IMAP,TCP等)
  • 来自zabbix agent的信息(仅支持未加密模式)
  • 来自snmp agent的信息

网络发现:网络发现规则——》动作——》添加主机,添加主机到主机组,关联模板

 
1、Ansible部署Agent
Zabbix服务器上安装Ansible

[root@Zabbix-Server ~]# yum -y install ansible

Server上Ansible配置

[root@Zabbix-Server ~]# vi /etc/ansible/hosts
[webservers]
10.0.100.13

[root@Zabbix-Server ~]# vim zabbix_agent.yml
变量zabbix_server: 10.0.100.132 会在zabbix_agentd.conf用到

---
- hosts: webservers
  vars:
  - zabbix_server: 10.0.100.132
  tasks:
    - name: Install zabbix agent - CentOS6
      yum: name=https://repo.zabbix.com/zabbix/4.0/rhel/6/x86_64/zabbix-agent-4.0.0.2-el6.x86_64.rpm state=present
      when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "6"
    - name: Install zabbix agent - CentOS7
      yum: name=https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present
      when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
    - name: Copy zabbix agent configuration file
      template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
    - name: Start zabbix agent
      service: name=zabbix-agent state=started enabled=true
...

[root@Zabbix-Server ~]# vim zabbix_agentd.conf.j2

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
DebugLevel=3
Server={{ zabbix_server }}
ListenPort=10050
ListenIP={{ ansible_default_ipv4.address }}
ServerActive={{ zabbix_server }}
Hostname={{ ansible_default_ipv4.address }}
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UserParameter=tcp.status[*],ss -antp | awk '{a[$$1]++}END{print a["'$1'"]}'

客户端确保卸载agent才能进行测试 yum -y remove zabbix-agent,pkill zabbix_agentd,而且要删除客户端主机

[root@Zabbix-Server ~]# ansible-playbook zabbix_agent.yml -k
默认是root,建立免交互-k,统一密码
报错:Using a SSH password instead of a key is not possible because Host Key checking
解决方法:vi /etc/ansible/ansible.cfg

在文件中进行搜索定位到
:/host_key_checking

# uncomment this to disable SSH key host checking
#host_key_checking = False
修改后:
# uncomment this to disable SSH key host checking
host_key_checking = False

Server服务端Ansbile部署情况
重要!运维监控知识总结_第75张图片

在客户端上测试验证
[root@Zabbix-Agentd ~]# vi /etc/zabbix/zabbix_agentd.conf
重要!运维监控知识总结_第76张图片

 
2、创建自动发现规则
配置——》自动发现——》自动发现规则——》uname
重要!运维监控知识总结_第77张图片

等待一会,出现结果
重要!运维监控知识总结_第78张图片

3、创建动作
事件源——》自动发现——》创建动作
重要!运维监控知识总结_第79张图片

配置操作:(操作类型也可以告警)
重要!运维监控知识总结_第80张图片
重要!运维监控知识总结_第81张图片

等待一会,测试结果验证:
在这里插入图片描述

3、自动注册(事件源要对应)

Agent主动上报——》动作(自动注册)——》添加主机、添加主机到主机组——》关联模板

1、Agent主动上报

[root@Zabbix-Agentd ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=10.0.100.132

监控项要使用主动式Agent
重要!运维监控知识总结_第82张图片

2、创建动作
动作
重要!运维监控知识总结_第83张图片

操作
重要!运维监控知识总结_第84张图片

3、等待测试结果
在这里插入图片描述

如果想要更灵活,可以使用元数据
可以在zabbix_agentd.conf.j2设置后再ansible-playbook 或者 直接在agent修改/etc/zabbix/zabbix_agentd.conf
HostMetadataItem=system.uname ,返回的是Linux就自动注册
重要!运维监控知识总结_第85张图片

第7章 Grafana展示Zabbix监控数据

官网:docs.grafana.org/installation/rpm/
下载:https://grafana.com/grafana/download/7.1.0
服务端安装Grafana

# wget https://dl.grafana.com/oss/release/grafana-7.1.0-1.x86_64.rpm
# sudo yum install grafana-7.1.0-1.x86_64.rpm
# systemctl start grafana-server
访问地址:http://<server ip>:3000
用户名密码默认均为 admin

重要!运维监控知识总结_第86张图片

grafana安装zabbix连接插件

[root@Zabbix-Server ~]# grafana-cli plugins list-remote | grep zabbix
id: alexanderzobnin-zabbix-app version: 4.0.1
[root@Zabbix-Server ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
[root@Zabbix-Server ~]# systemctl restart grafana-server

重要!运维监控知识总结_第87张图片

Plugin Error
Fetch error: 404 Not Found Instantiating http://10.0.100.132:3000/public/@grafana/ui Loading http://10.0.100.132:3000/public/plugins/alexanderzobnin-zabbix-app/datasource-zabbix/module.js Loading plugins/alexanderzobnin-zabbix-app/datasource-zabbix/module

Grafana版本不支持。因此我重新安装后正常 然后安装好Zabbix插件后,Configuration找不到Zabbix数据源,无法Add
data source
#默认情况下,未签名的插件不会加载,需要允许
#否则会出现更新插件但依旧无法找到zabbix数据源 vi /etc/grafana/grafana.ini allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource

创建zabbix数据源,读取zabbix_api获取数据
Zabbix API地址:http://10.0.100.132/api_jsonrpc.php

Dashboard
将Zabbix主机展示出来
重要!运维监控知识总结_第88张图片

你可能感兴趣的:(#,Zabbix,运维,linux,zabbix)