1. Zabbix基于SNMP监控

1.1 zabbix-web所能指定的监控方式

ssh/telnet

agent:master/agent

SNMP:Simple Network Management Protocol 

IPMI:Intelligent Platform Management Interface 智慧平台管理接口
# 原本是一种Interl架构的企业系统的周边设备所采用的一种工业标准
# IPMI也是一个开放的免费标准,使用者无需支付额外的费用即可使用此标准 JMX:Java Management eXtension (Java管理扩展)
# 用于通过Java自己的接口对java程序进行监控
# 监控JVM虚拟机
# zabbix-java-gateway用于获取监控数据 # 如果在服务器端定义Type为Trapper,那么客户端可以向服务器端发送任意类型的数据
# 服务端收到把它保存下来就可以了

1.2 SNMP概述

1)snmp协议用途

SNMP:Simple Network Management Protocol 简单网络管理协议(非常古老的协议)

  • 用于网络管理的协议
  • SNMP用于网络设备的管理:交换机、路由器

版本:

  • v1:1989
  • v2c:1993
  • v3:1998

2)snmp的组件

MIB:Management Information Base 管理信息库(每一个agent都有一个MIB库)

  • 定义了所有可被管理对方的集合,而且还额外定义了被管理对象的名称、访问权限、数据类型等属性
  • 实现了能够定义双方可接受的监控组件以及监控组件中数据存储格式的一个组件
  • 还能实现将每一个被管理对象的ID (Object ID,OID)对应到名称的转换

MIB视图:MIB库的子集

  • 授权:将某MIB视图与某Community绑定来实现

SMI:MIB表示符号

SNMP协议本身

3)snmp通信方式

# NMS端
“读”(get,getnext) 操作:管理员向设备获取数据
“写” (set)操作:管理员向设备执行设置操作
“Trap”(trap)操作:设备需要在重要状况改变的时候,向管理员通报事件的发生 # Agent端
Response:返回一个或多个参数值

4)所使用的端口

  • Agent:161/udp
  • NMS:162/dup

5)工作模式

  • NMS端向agent端采集数据(NMS表示监控节点)
  • agent端向NMS端报告数据
  • NMS请求agent修改配置

1.3 Linux上启用snmp

# 安装相关的程序包
yum install -y net-snmp net-snmp-utils net-snmp-libs # 定义配置文件
vim /etc/snmp/snmpd.conf
# 为了方便,干脆就定义成 .1.3.6.1.2.1 ,把最后一个1去掉 # 启动服务
systemctl start snmpd # 被监控端开启的服务,监听在 161/udp 上
systemctl start snmptrapd # 监控端开启的服务(如果允许被监控端启动主动监控时启用)

1.4 snmp配置文件

1)配置文件概览

  1. 定义认证符,将社区名称"public"映射为"安全名称"
  2. 将安全名称映射到一个组名
  3. 为我们创建一个视图,让我们的团队有权利

2)OID(Object ID)

  • 1.3.6.1.2.1

最后一个1才表示跟Internet相关,从这里开始定义一台主机的相关对象,具体有:

1:system
# 1.3.6.1.2.1.1 2:interface
# 1.3.6.1.2.1.2 4:ip
# 1.3.6.1.2.1.4 6:tcp
# 1.3.6.1.2.1.6 7:udp
# 1.3.6.1.2.1.7

1.5 配置SNMP监控

1)配置并启动snmp

# 修改配置文件
[root@c7_110 ~]# vim /etc/snmp/snmpd.conf
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.2 # 网络接口的相关数据
view systemview included .1.3.6.1.4.1.2021 # 系统资源负载,memory, disk io, cpu load
view systemview included .1.3.6.1.2.1.25
# 如果不想定义这么多,为了方便,可以直接定义一个 .1.3.6.1.2.1 # 然后启动snmp
[root@c7_110 ~]# systemctl start snmpd

2)添加一个snmp接口并配置templates

2. Zabbix基于JMX监控

2.1 JMX概述

Java虚拟机(JVM)具有内置的插件,使得能够使用JMX监视和管理它,还可以使用JMX监视工具化的应用程序

JMX(Java Management Extensions)Java管理扩展

2.2 JMX监控配置过程

1)zabbix-java-gateway主机设置

# 在某主机上(不一定要是在Zabbix_Server上)安装zabbix-java-gateway程序包
yum install -y zabbix-java-gateway # 对zabbix-java-gateway进行配置,也可以不用配置,直接启动
vim /etc/zabbix/zabbix_java_gateway.conf
  Listen_IP=10.0.0.110 # 监听地址,可修改成0.0.0.0
  Listen_PORT=10052 # 监听zabbix_java进程的端口,默认是10052
  TIMEOUT=10 # zabbix_java的超时时间 # 启动zabbix-java-gateway
systemctl start zabbix-java-gateway.service

2)配置zabbix-server访问java-gateway

JavaGateway=10.0.0.110   #即 zabbix server IP地址
JavaGatewayPort=10052
StartJavaPollers=5 # 与启动进程轮询个数

# 配置完成之后需要重启zabbix-server

3)开启JMX远程监控

vim /usr/local/tomcat/bin/catalina.sh  # 如果是yum安装的tomcat,要在/etc/sysconfig/tomcat中修改
#启用JVM接口,默认没有启用
export CATALINA_OPTS=$CATALINA_OPTS "-Djava.rmi.server.hostname=10.0.0.110
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=12345 # 这里可能需要修改
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false" ###
jmx[object_name,attribute_name]
object name # 它代表MBean的对象名称
attribute name - # 一个MBean属性名称,可选的复合数据字段名称以点分隔
# 示例:jmx["java.lang:type=Memory","HeapMemoryUsage.used"] # 配置完成后需要重启tomcat

4)在web上定义JMX监控

和SNMP相同,只需要定义一个JMX Interface即可,然后添加一个JMX的templates,其他操作完全相同

2.3 从外部导入Templates模板

3. Zabbix分布式监控

3.1 分布式监控概述

1)Zabbix的三种架构

  • Server-agent
  • Server-Node-agent:使用节点(node)
  • Server-Proxy-agent:使用代理(proxy)

zabbix能高效的监控分布式IT架构,在大型环境中zabbix提供两种解决方案:proxy和node

2) Proxy or Node

代理(proxy)用于本区域数据搜集,并将数据发送给server

节点(node)提供完整的zabbix server用以建立分布式监控中的层级

3.2 使用节点(node)

节点(node)提供完整的Zabbix Server用以建立分布式监控中的层级

Node本身是一台server,它有有整的web页面,完整的数据库,它将数据源源不断的传送给Master

  • 解决host过多时单台Server面临性能瓶颈的问题
  • 使用多个instance,每个instance是独立的一套zabbix,有database和Frontent(optional)
  • 支持热插播,Node和Server的连接可以随时断开,但不影响Node的正常运行
  • Node定时给Server发送configuration、history、event
  • Server定时给Node发送configuration
  • 所有配置变更只能在Node节点操作,不能在Server操作
  • 支持树状结构,Node又可以是一个Server

3.3 使用代理(proxy)

代理(proxy)用于本区域数据手机,并将数据发送给server

Proxy只有一个proxy的daemon进程,Proxy也有自己的数据库,但它的数据库只会保存一定时间的数据,它与Master通信是将一批信息打包后发送到Master,Master将这些数据merge如Master数据库

  • Proxy不会向Server同步 configuration ,只会接收
  • Proxy的数据库定时会将数据传送该Server,Proxy本地数据库只保存最近没有发送的数据

Master-Proxy相比Master-Node的优先:

  • Proxy压力小,数据库只存储一定时间数据
  • Master压力变小,数据不是源源不断获取,减小IO压力
  • 架构更清晰,易维护

3.4 Server-Proxy-agent配置示例

1)在proxy主机上安装软件包

yum install -y zabbix-proxy zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender

2)为proxy创建一个数据库并授权

# 创建数据库
create database zabbix_proxy character set utf8; # 创建用户并授权
grant all on zabbix_proxy.* to zbxuser@'10.0.%.%' identified by 'woshiniba' # 刷新权限
flush privileges

3)导入sql文件

  • zabbix-proxy-mysql 包里面带有

# 复制并解压
cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./
gzip -d schema.sql.gz # 导入数据,导入到刚刚建好的zabbix_proxy库中
mysql -root -p zabbix_proxy < schema.sql

4)配置并启用zabbix-proxy

### 配置zabbix-proxy
vim /etc/zabbix/zabbix_proxy.conf Server=10.0.0.202 # server 的IP
ServerPort=10051 # server 的端口 Hostname=zbxproxy.hgzero.com # 主机名
ListenPort=10051 # proxy自己的监听端口
EnableRemoteCommands=1 # 允许远程命令
LogRemoteCommands=1 # 记录远程命令的日志 # 数据的配置
DBHost=10.0.0.88
DBName=zabbix_proxy
DBUser=zbxuser
DBPassword=woshiniba ConfigFrequency=30 # 多长时间,去服务端拖一次有自己监控的操作配置;为了实验更快的生效,这里设置30秒,默认3600s
DataSenderFrequency=1 # 每一秒向server 端发一次数据,发送频度 ### 启动zabbix-proxy
systemctl start zabbix-proxy

5)通过proxy代理的节点上操作

  • 假设有一台节点node2,通过proxy代理
# 在node2的zabbix_agent配置文件中填入Zabbix Server和Proxy的地址
vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.88,10.0.0.202
ServerActive=10.0.0.88,10.0.0.202

6)在web上创建配置agent 代理

  • 这个时候再创建Host时,就可以看到刚刚配置的proxy了,可以选择是否通过proxy来监控

4. Zabbix通过微信发告警信息

4.1 注册企业微信并配置

1)注册企业微信

  • 注册成功后进入后台进行配置

2)添加告警组并添加成员

3)记录企业ID

4)创建应用并填写相关信息

4.2 配置Zabbix Server

1)确认刚刚记录的信息

告警组用户的账号、企业ID、创建应用的Secret、Agentld

2)下载消息推送脚本并测试

下载脚本后,将脚本保存在 /usr/lib/zabbix/alertscripts 后,修改权限及属主属组:

chmod 755 wechat
chown zabbix.zabbix wechat

测试脚本:

[root@c7_node_02 alertscripts]# ./wechat --corpid=wwd43fee2ab4dbfb21
    --corpsecret=pa2dgtdf8V0lFWwYaoG62345g_R39dodmK37RPJeOMOs
    --msg="现在在进行告警测试"
    --user=hgzerowzh
    --agentid=1000002
{"errcode":0,"errmsg":"ok","invaliduser":""} # 参数说明
-corpid= 我们企业里面的id
--corpsecret= 这里就是我们Secret里面的id
-msg= 内容
-user=我们邀请用户的账号
  • 注意:脚本在安放完成之后,要重启zabbix-server

3)在Zabbix Server上添加报警媒介

4)为对应的用户添加报警媒介

5)创建Action

创建Action时,在“操作”中选择 “Send Message”,并通过 “微信报警” 发送给用户

# 操作信息内容
故障发生:{TRIGGER.NAME}
故障主机:{HOSTNAME1}
IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME} : {ITEM.VALUE}
当前状态:{TRIGGER.STATUS} : {ITEM.VALUE1}
事件ID:{EVENT.ID} # 恢复操作信息内容
故障恢复:{HOSTNAME1} 已恢复!
IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME} : {ITEM.VALUE}
当前状态:{TRIGGER.STATUS} : {ITEM.VALUE1}
事件ID:{EVENT.ID}

6)微信接受信息查看

主动触发事件后,来查看微信是否能接受到信息

5. Zabbix调优相关

5.1 Zabbix调优

1)Database

历史数据不要保存太长时长;

尽量让数据缓存在数据库服务器的内存中;

2)触发器表达式

减少使用聚合函数min(), max(), avg();尽量使用last(),nodata(),因为聚合函数,要运算

数据收集:polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active)主动监控);

数据类型:文本型数据处理速度较慢;尽量少收集类型为文本 text或string类型的数据;多使用类型为numeric 数值型数据 的;

5.2 zabbix服务器的进程

1)服务器组件的数量

alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...

StartPollers=60
StartPingers=10
  ...
StartDBSyncer=5
  ...

2)设定合理的缓存大小

CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M

3)数据库优化

# 分表:
    history_*     trends*     events*

5.3 其它解决方案

# 其他解决方案,grafana+collectd+influxdb
grafana:展示
collectd:收集
influxdb:存储 # prometheus
exporter:收集
alertmanager:
grafana:展示

Zabbix监控使用进阶的更多相关文章

  1. Zabbix监控系统深度实践

    Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著  ISBN 978-7-121-24 ...

  2. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  3. Zabbix监控nginx-rtmp status(json版)

    与前面的文章 zabbix监控nginx-rtmp status(html版)区别只在于取值的页面不一样 http://127.0.0.1:81/control/get/all_streams sta ...

  4. Zabbix监控mysql performance

    介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...

  5. zabbix监控Java 8080端口

    linux下端口和服务是对应的,Java进程启动时默认监听8080端口,如果服务挂掉则8080端口就没有了. lsof -i:8080 端口,如果没有任何的输出,说明该端口不在工作. 想在zabbix ...

  6. zabbix监控报错zabbix server is not running解决方法

    问题描述: 布置好zabbix监控,正常运行.但是重启了虚拟机服务器之后,页面出现如下的报错,而且设置的报信息也是失效的:

  7. Zabbix监控Tengine

    title: Zabbix监控Tengine tags: zabbix,nginx,tengine author: Chinge Yang date: 2016-12-29 --- Zabbix监控T ...

  8. zabbix 监控web网站性能

    一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...

  9. Zabbix监控disk performance

    概述 zabbix获取/sys里面的磁盘信息并分析来监控disk performance sysfs是Linux内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似(默认挂载在 ...

随机推荐

  1. docker部署redis主从和哨兵

    docker部署redis主从和哨兵 原文地址:https://www.jianshu.com/p/72ee9568c8ea 1主2从3哨兵 一.前期准备工作 1.电脑装有docker 2.假设本地i ...

  2. bash中选择结构、循环结构与break、continue

    if两种选择结构 if 测试条件; then 程序块 else 程序块 fi if 测试条件1; then 程序块 elif 测试条件2; then 程序块 ... elif 程序条件n; then ...

  3. Manacher (马拉车) 算法:解决最长回文子串的利器

    最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...

  4. 连续子数组的和的绝对值的最大值、最小值(非绝对值的话直接dp动态规划)

    前缀和的思路: sum[i] = num[0]+num[1]+......+num[i-1] sum[j] = num[0]+num[1]+......+num[j-1] 那么:num[i]+num[ ...

  5. JAVA 去除字符串前后的指定字符

    为了显示效果更好,我们可以将多余的字符去掉,代码如下: /** *去掉字符串前后的指定字符 */ public static String trimBothChars(String str, Stri ...

  6. Scrum转型(一) 为什么敏捷和Scrum

    1.1 为什么敏捷 由于传统的瀑布模型管理方法无法满足现代某些软件产品开发过程的特点,我们需要使用敏捷的方法(例如,Scrum是一个让我们关注于在短时间里交付高质量商业价值的敏捷框架). 需求频繁变动 ...

  7. rpm命令介绍

    rpm安装不能指定安装位置. 查看系统安装了哪些软件:rpm -qa  rpm -qa |grep keyword      (q:query  a 是all)   查看软件是否安装: rpm -q  ...

  8. NOIP前一些题目的理解

    ZYB和售货机(图论,环) 题目链接 个人感觉这道题与基环树没有任何关系,你会发现,每个点最多只有一个入度和出度,所以只能是链或环. 还有就是本题的突破点就在于正确建图,题目的限制保证每个点的入度不大 ...

  9. WPF窗体中嵌入/使用WinForm类/控件(基于.NET Core)

    如题,WPF中嵌入WinForm的做法,网络上已经很多示例,都是基于.NET XXX版的. 今天King様在尝试WPF(基于.NET Core 3.1)中加入Windows.Forms.ColorDi ...

  10. bluestore的osd自启动

    前言 自启动相关的文章很多,有分析的很详细的文章,这里就不做赘述,本篇讲述的是什么情况下用,怎么用的问题 使用场景 一台机器的系统盘坏了,需要重装系统,相关的一些信息没有了,但是上面的数据盘还是在的, ...