重要!运维监控知识总结
监控对象:1.监控对象的理解:CPU是怎么工作的,原理2.监控对象的指标:CPU使用率 CPU负载 CPU个数 上下文切换3.确定性能基准线:怎么样才算故障?CPU负载多少才算高监控范围:1.硬件监控 服务器的硬件故障2.操作系统监控 CPU 内存 IO 进程3.应用服务监控4.业务监控1.硬件监控(机房)硬件监控:1.使用IPMI2.机房巡检
❤监控概述
为什么要监控?
- 对系统不间断实时监控
- 实时反馈系统当前状态
- 保证业务持续性运行
如何去监控?
数据采集 ——》数据存储 ——》数据分析 ——》 展示和告警
监控对象:
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
安装IPMIyum install -y OpenIPMI ipmitool
使用IPMI两种方式
1.本地调用
2.远程调用 (IP地址 用户名和密码)
ipmi配置网络两种方式
1.ipmi over lan 独立
ipmitool help
路由器和交换机: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
需要注意的是,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

如: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分钟的负载情况
查看服务器当前连接:
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,按照进程的内存使用率排序

第一行,任务队列信息,同 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队列非空的时间比率
重点关注参数
- iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
- avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
- await 表示每次IO请求等待时间,包括等待时间和处理时间
- svctm 表示每次IO请求处理的时间
- %util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
疑惑:dm-0/1/2是什么?怎么来的?
(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信息写到磁盘开始部分

iostat 详解
(4)网络
- iftop、带宽、通常情况丢包ping
- 阿里测、奇云测、站长工具
iftop命令详解
iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等

相关参数及说明
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可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或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;
}
}

在浏览器中输入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功能?
- 数据采集

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故障排除

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服务器
- yum install zabbix-server-mysql zabbix-web-mysql
- 初始化数据库
- Zabbix Server配置
- Zabbix Web配置
源码编译部署Zabbix服务器
- 部署Nginx
- 部署PHP
- 初始化数据库
- 部署Zabbix Server
- 部署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




问题一:
遇到的错误: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
- 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

源码编译方式部署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.
报错:
解决:点击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;





报错:写权限


第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、创建主机、监控项、触发器、图形和模板

创建的案例都可以在模板中找到对应的
①创建主机
②创建监控项
③创建图形

④创建触发器
⑤创建模板
| 监控类型 | 模板对象 |
|---|---|
| 服务监控 | 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模板,主机那个选择也要更新。最终才会显示

监控项补充

用户自定义参数
在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.confUserParameter=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
测试图:
触发器补充
一个简单有效的表达式看起来像::{<server>:<key>.<function>(<parameter>)}<operator><constant>{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、邮件告警
①配置——》动作——》创建动作——》触发条件
②配置——》动作——》创建操作——》可设置指定的媒介类型
③管理——》报警媒介类型——》设置媒介账号和密码
④管理——》用户——》报警媒介——》设置收件人账号
⑤设置触发器

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

⑦将邮件信息格式化一下
配置——》动作——》操作
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

验证:
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" 123@qq.com
②编写告警脚本
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 123@qq.com zabbix "zabbix test"
Zabbix提供参数进行传参,收件人,主题,正文
给予mail.tmp,Zabbix权限
# chown zabbix.zabbix /tmp/mail.tmp

③创建媒体类型
管理——》报警媒介类型——》场景
④用户指定媒介类型
管理——》用户——》报警媒介类型设置
⑤配置——》动作 设置好
配置——》主机——》触发器条件设置
等待1~2分钟
⑥测试验证
3、钉钉告警
步骤:钉钉自定义机器人——》编写通知脚本——》创建媒体类型——》用户指定媒介类型
文档:钉钉开发文档
①钉钉是基于群聊去通知的,添加机器人
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

③创建媒体类型
④用户指定媒介类型
⑤触发器更新
⑥钉钉验证
第5章 监控案例
1、监控Web
监控指标
- 平均下载速度
- 响应时间
- HTTP状态码
步骤:
创建模板:A ——》 在模板A中:创建Web scenarios ——》在模板A中:创建Triggers ——》主机关联模板A
①创建模板
②创建Web场景,设置访问头,IE11
场景:
步骤:
③主机应用到该模板
④测试验证
⑤字体乱码调整
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/

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

②服务器安装启动配置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接口
模板关联:Template App Generic Java JMX
点击更新后,等待一会观察JMX是否亮起

链接参考: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

②创建模板
模板:
监控项:
创建图形
③将运行Nginx的主机关联模板
图形验证
监控项设置成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
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,已经写好了监控项
3、将运行MySQL的主机关联模板
4、测试结果

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.confUserParameter=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


3、将所有主机关联模板

❤第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部署情况
在客户端上测试验证
[root@Zabbix-Agentd ~]# vi /etc/zabbix/zabbix_agentd.conf
2、创建自动发现规则
配置——》自动发现——》自动发现规则——》uname
等待一会,出现结果
3、创建动作
事件源——》自动发现——》创建动作
配置操作:(操作类型也可以告警)

等待一会,测试结果验证:
3、自动注册(事件源要对应)
Agent主动上报——》动作(自动注册)——》添加主机、添加主机到主机组——》关联模板
1、Agent主动上报
[root@Zabbix-Agentd ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=10.0.100.132
监控项要使用主动式Agent
2、创建动作
动作
操作
3、等待测试结果
如果想要更灵活,可以使用元数据
可以在zabbix_agentd.conf.j2设置后再ansible-playbook 或者 直接在agent修改/etc/zabbix/zabbix_agentd.confHostMetadataItem=system.uname ,返回的是Linux就自动注册
第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

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

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主机展示出来
更多推荐

所有评论(0)