Zabbix
1、zabbix 基础介绍:
监控系统:硬件、软件、业务指标
sensor:数据指标
采样 --> 存储 --> 报警 --> 展示
采样:
存储:
数据:历史数据、趋势数据
报警:
脚本:
媒介:
展示:Visual
监控数据采集通道
SNMP:Simple Network Management Protocol
ssh/telnet
IPMI:
agent:
master/agent
JMX:Java Management eXtensions
NMS:
网络监控系统
开源监控工具:
cacti, nagios, zabbix, ganglia
cacti, nagios
zabbix
ganglia
数据:
历史数据:NVPS
趋势数据
存储系统:
关系型数据库:MySQL
rrd:roundrobin database
NoSQL:redis/mongodb
时间序列存储
SNMP协议:
nms/agent
nms: cli/gui
agent: service
MIB, OID, ...
特性:
数据采样:
数据采集通道:snmp, ssh/telnet, agent, ipmi, jmx(java Management eXtensions)
自定义采样机制:UserPrameter(基于agent实现)
告警:
升级:
script
notification
数据存储:
数据存储:mysql/pgsql
展示:
实时绘图:graph, screen, slide show, map
支持模板:
网络自动发现:
分布式监控:
Server <--> Proxy <--> agent/ssh/ipmi
2、zabbix程序的组件:
Zabbix_server:服务端守护进程;负责接受agent发送的报告信息,所有配置、统计数据以及操作数据均有其组织进行;
Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
Proxy:可选组件,常用于分部监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;
Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Porxy端;
zabbix_agentd:agent守护进程;
zabbix_proxy:代理服务器,可选组件;
zabbix_get:命令行工具,手动测试向agent发起数据采集请求;
zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据;
zabbix_java_gateway: java网关;
zabbix_database:MySQL或PostgreSQL;
zabbix_web:Web GUI
Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
链接官方文件包下载:
clipboard1.png clipboard2.png
zabbix逻辑组件:
主机组
主机
监控项(item)
key:实现获取监控的目标上的数据的命令或脚本的名称;
应用(application):同一类监控项的集合;
触发器(trigger):表达式;PROBLEM, OK;
事件(event):
动作(action):由条件(condition)和操作(operation)组件;
媒介(media):发送通知的通道;
通知(notification):
远程命令(remote command):
报警升级():
模板(template):快速定义被监控主机的各监控项的预设项目集合;
图形(graph):用于展示历史数据或趋势数据的图像;
屏幕(screen):由多个graph组成;
zabbix安装:
设置ZBX DB:
mysql> CREATE DATABASE zabbix CHARSET 'utf8';
mysql> GRANT ALL ON zabbix.* TO ...;
安装服务端:
~]# yum install zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm zabbix-get-3.0.2-1.el7.x86_64.rpm
注意:CentOS 7.0和7.1需要升级trousers程序包;
安装web GUI:
~]# yum install httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
~]# yum install zabbix-web-3.0.2-1.el7.noarch.rpm zabbix-web-mysql-3.0.2-1.el7.noarch.rpm
安装agent端:
~]# yum install zabbix-agent-3.0.2-1.el7.x86_64.rpm zabbix-sender-3.0.2-1.el7.x86_64.rpm
设置数据库:
#vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = ON
innodb_file_per_table = ON
innodb_buffer_pool_size = 256M
max_connections = 2000
log_bin=/mydata/logs/master-log
MariaDB [(none)]> create database zbxdb;
MariaDB [(none)]> grant all on zbxdb.* to 'zbxuser'@'172.18.252.%' identified by 'zbxpass';
MariaDB [(none)]> flush privileges;
服务端数据库初始化:
2.x:三个sql脚本;
3.x:一个sql脚本;
~]# cp /usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz ./
~]# gzip -d create.sql.gz
~]# mysql -uzbxuser -h127.0.0.1 -p zabbix < create.sql 导入数据库
zabbix server配置启动:
配置文件:/etc/zabbix/zabbix_server.conf
配置段:
~]# grep "^#####" zabbix_server.conf
############ GENERAL PARAMETERS ################# 一般性配置
############ ADVANCED PARAMETERS ################ 高级配置
####### LOADABLE MODULES ####### 可加载模块
####### TLS-RELATED PARAMETERS ####### 加密,zabbix默认是明文的,如果想要加密则用这个模块
通用参数:
ListenPort=10051
SourceIP= 发出监控数据
LogType=file
LogFile=/var/log/zabbix/zabbix_server.log 如果采集不到文件则使用这个日志文件查看(很重要)
LogFileSize=0 0代表禁止自动滚动,最好设置为滚动
DebugLevel=3 设置日志日志详细级别,考虑到I/O压力不要设置太小
DBHost=localhost 数据库允许连入的主机
DBName=zabbix
DBUser=zabbix
DBPassword=
DBSocket=/tmp/mysql.sock
DBPort=3306
配置zabbix-web:
配置php的时区设定:(两者选一个即可)
(1) /etc/php.ini (所有的PHP程序)
(2) vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone
clipboard3.png
访问URL
# systemctl start httpd.service
http://HOST/zabbix
clipboard4.png
clipboard5.png
clipboard6.png
安装生成的配置文件:/etc/zabbix/web/zabbix.conf.php
登录:
admin/zabbix 初始密码,登陆后请修改
Administration --> Users --> Use
Monitoring
Inventory
Reports
Configuration
Administration
agent端的配置:(被监控)
~]# yum install zabbix-agent-3.0.2-1.el7.x86_64.rpm zabbix-sender-3.0.2-1.el7.x86_64.rpm
Unit file: zabbix-agent.service
配置文件:/etc/zabbix/zabbix_agentd.conf
############ GENERAL PARAMETERS #################
##### Passive checks related
被动监控相关配置(主动监控和被动监控由server端决定)
##### Active checks related
主动监控相关配置,agent端主动向server周期性发送数据;
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS #######
用户自定义监控参数
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
##### Passive checks related
Server=IP1, IP2, ... 监控本机的server的地址
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
##### Option: ListenIP
ListenIP=0.0.0.0 允许监听本机的哪个IP
##### Active checks related
ServerActive=IP1[:port], IP2[:port], ...
Hostname=Unique_HOSTNAME 自己的主机名
必须与服务器配置的监控主机的主机名称保持一致;
Hostname
HostnameItem
HostMetadata
HostMetadataItem 这四项是用来让服务器解析自己的主机
clipboard7.png
启动服务:
systemctl start zabbix-agent.service
clipboard8.png
3、监控配置:
术语:host groups --> host --> application --> item --> trigger --> action (conditions, operations)
graph:
simple: 每个item定义完成后自动生成
customed:用于将多个item的数据整合于一个图形中展示
items: key+parameter
key:
zabbix内建:
type:
agent (server:pull)
agent(active) (agent:push)
snmp v1
...
用户自定义(UserParameter)
自定义key:
clipboard9.png clipboard10.png clipboard11.png
采集到的数据的类型:
数值:
整数
浮点数
字符串:
字符串
文本
存储的值:
As is:不对数据做任何处理
Delta:(simple change),本次采样减去前一次采样的值的结果
Delta:(speed per second),本次采样减去前一次采样的值,再除以经过的时长;
trigger:
界定某特定的item采集到的数据的非合理区间或非合理状态:逻辑表达式
逻辑表达式,阈值;通常用于定义数据的不合理区间;
OK:正常 状态 --> 较老的zabbix版本,其为FALSE;
PROBLEM:非正常 状态 --> 较老的zabbix版本,其为TRUE;
OK --> PROBLEM
Recovery:PROBLEM --> OK
触发器存在可调用的函数:
nodata()
last()
date()
time()
now()
dayofmonth()
...
Severity:严重等级
Not classified
Information
Warning
Average
High
Disaster
触发器表达式:
{hostname:key[paramters].function(arguments)
>, <, =, #(not equal)...
+, -, *, /
&, |
{n1.magedu.com:net.if.in[eno16777736,packets].last(#1)}>15
trigger间存在依赖关系:
zabbix server <--> Router1 <--> Host1
事件机制:
四种事件源:trigger, discovery, auto registration, internal
Media:媒介
告警信息的传递通道;
类型:
Email:邮件
Script:自定义脚本
SMS:短信
Jabber:
Ez Texting:
接收信息的目标为zabbix用户:
需要用户上定义对应各种媒介通道的接收方式;
Action:
conditions:
多个条件之间存在逻辑关系;
operations:
条件满足时触发的操作;
send message:
(1) Media type:传递信息的通道;
(a) Email
(b) Script:报警脚本;
脚本放置路径:zabbix_server.conf配置文件中AlertScriptsPath参数定义的路径下;
/usr/lib/zabbix/alertscripts/
zabbix服务器在调用脚本时,会向其传递三个参数:
$1:经由此信道接收信息的目标;
$2:subject
$3:body
zabbix 3.0之后的版本,此三个变量定义为内部宏:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
(2) 信息接收人:
(a) User Groups
(b) Users
admin:
### Python报警脚本示例:
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import sys
def formatAddr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def send_mail(to_list,subject,content):
mail_host = 'smtp.exmail.qq.com'
mail_user = 'USERNAME@DOMAIN.TLD'
mail_pass = 'YOUR_PASSWORD'
#以上内容根据你的实际情况进行修改
msg = MIMEText(content,'','utf-8')
msg['Subject'] = Header(subject, 'utf-8').encode()
msg['From'] = formatAddr('zabbix监控 <%s>' % mail_user).encode()
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(mail_user,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__":
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
remote command
功能:
在agent所在的主机上运行用户指定的命令或脚本;例如:
重启服务;
通过IPMI重启服务器;
任何用户自定义脚本中定义的操作;
可执行的命令类型:
IPMI
ssh
telnet
Custom Script
Global Script
前提:
在agent需要完成的配置:
(1) zabbix用户拥有所需要的管理权限;
编辑/etc/sudoers文件,注释如下行;
Defaults requiretty
添加如下行:
zabbix ALL=(ALL) NOPASSWD: ALL
(2) agent进程要允许执行远程命令;
编辑/etc/zabbix/zabbix_agentd.conf,设置如下配置:
EnableRemoteCommands=1
重启服务生效;
展示接口:
graph: simple, custom
screen:把多个graph整合于同一屏幕进行展示;
slide show:把多个screen以slide show的方式进行展示
map:
模板:
主机配置模板:用于链接至目标主机实现快速监控管理;
link, unlink, unlink and clear
模板可继承;
宏:macro,预设的文本替换模式;
级别:
全局:Administration --> General --> Macros
模板:编辑模板 --> Macros
主机:编辑主机 --> Macros
由大写字母组成
类型:
内建:{MACRO_NAME}
文档:
https://www.zabbix.com/documentation/3.4/manual/appendix/macros/supported_by_location
自定义:{$MACRO_NAME}
命名方式:大写字母、数字和下划线;
zabbix监控:
(1) host groups <--> hosts
(2) items:监控项 <--> applications
(3) triggers --> trigger events
OK <--> PROBLEM
(4) actions:
CONDITIONS:操作执行的前提条件
非维护期间;
由trigger定义;
OPERATIONS:OK --> PROBLEM
remote command:
ssh/telnet/script/...
send message:
Email, SMS, Jabber, EZ Texting, Script
RECOVERY OPERATIONS: PROBLEM --> OK
展示方式:
graph, screen, slide show
map
配置主机监控的方法:
(a) 手工添加;
(b) 链接模板;
网络发现:
zabbix server扫描指定网络范围内的主机;
发现方式:
ip地址范围;
可用服务(ftp, ssh, http, ...)
zabbix_agent的响应;
snmp_agent的响应;
分两个阶段:
discovery
actions:把discvery events当作前提条件;
发现:--> discovery events
Service, Host
UP/DOWN, DICOVERED/LOST
可采取的动作:
send message, remote command
add/remove host
enable/disable host
add host to group
link template to host
...
clipboard12.png
5、自定义key:
item type: 不同的类型适用的接口有可能不同;有些key仅能用在指定的接口之上;
agent
agent(active)
simple
snmpv1
snmpv2
snmpv3
ssh
...
接口类型:agent, ipmi, snmp, jmx
自定义key:在zabbix agent端的配置文件上由用户通过UserParameter指令定义的key;
zabbix_agentd.conf文件中
UserParameter=<key>,<command>
6、Web监控:
监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
内建key:
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]:响应时间
web.test.rspcode[Scenario,Step]:响应码
7、主动/被动检测:
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
agent端所需要基本配置:
ServerActive=
Hostname=
zabbix_sender发送数据:
zabbix server上的某主机上,直接定义Item时随便定义一个不与其它已有key冲突的key即可,即item type为“zabbix trapper";
zabbix_sender
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value
可以用主动监测就用主动监测,这样对zabbix压力比较小,可以有效的节约服务器的资源
8、基于SNMP监控:
SNMP:简单网络管理协议;
agent/nms
zabbix主要还是针对agent来监控,只要能够安装zabbix-agent则不用SNMP,SNMP主要用于一些网络设备
网络设备:交换机,路由器
读(get, getnext)、写(set)、trap(陷阱);
为了安全,不能在监控中启用管理功能,即只需启动读功能,不启动写功能
在SNMP中需要监听套接字的是被管控端,称为agent端,除了启用trap,才启用nms(网络系统管理的管理端,类似于server端)
161/udp
162/udp
SNMP版本:V1、V2、V3
MIB:Management Information Base
OID:Object ID 对象ID(一棵倒置的树)
Linux启用snmp的方法:
# yum install net-snmp net-snmp-utils
配置文件:
/etc/snmp/snmpd.conf
定义ACL
OID:
.1.3.6.1.2.1.
1.1.0:系统描述信息,SysDesc
1.3.0:监控时间,SysUptime
1.5.0:主机名,SysName
1.7.0:主机提供的服务,SysService
2.1.0:网络接口数目
2.2.1.2:网络接口的描述信息
2.2.1.3:网络接口类型
.....
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.1
启动服务:
systemctl start snmpd.service
测试工具:
# snmpget -v 2c -c public HOST OID
# snmpwalk -v 2c -c public HOST OID
Key <Unique string to be used as reference to triggers> For example, “my_param”.
获取数据:snmpget -v 2c -c public ownIP .1.3.6.1.2.1.1.3.0
snmpwalk -v 2c -c public 172.18.0.68 .1.3.6.1.2.1.1
/usr/bin/snmpwalk 查询树上的所有节点
/usr/bin/snmpbulget 查询一组指标
/usr/bin/snmpbulwalk 获取此节点及以下的子树所有的数据
9、JMX:
tomcat主机设置(一台主机启动Tomcat)
监控tomcat:
/etc/sysconfig/tomcat,添加
CATALINA_OPTS 表示只对Tomcat有效
JAVA_OPTS 表示启动JVM就有效
CATALINA_OPTS="-Djava.rmi.server.hostname=TOMCAT_SERVER_IP -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" 指明监控的主机和IP
zabbix-java-gateway主机设置:(可以和zabbix-server在一台主机上)
zabbix-server不能适配JMX协议客户端,所以要安装zabbix-java-gatewa来代为获取数据
安装 zabbix-java-gateway程序包,启动服务;
zabbix-server端设置:
# vim zabbix-server.conf
JavaGateway=172.16.0.70
JavaGatewayPort=10052
StartJavaPollers=5
徒刑监控添加接口
可链接模板 Templates/Application --> Templates App Generic Java JMX
10、Zabbix Proxy的配置:
server-node-agent
server-proxy-agent
减轻zabbix-server压力
1、配置proxy主机:
(1) 安装程序包
zabbix-proxy-mysql zabbix-get
zabbix-agent zabbix-sender
(2) 准备数据库
创建、授权用户、导入schema.sql;
(3) 修改配置文件
Server=
zabbix server主机地址;
Hostname=
当前代理服务器的名称;在server添加proxy时,必须使用此处指定的名称;
需要事先确保server能解析此名称;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1
2、在server端添加此Porxy
Administration --> Proxies
3、在Server端配置通过此Proxy监控的主机;
注意:zabbix agent端要允许zabbix proxy主机执行数据采集操作:
Server=
zabbix performace tuning:
nvps:new values per second
100w/m, 15000/s
11、调优:
Database:
历史数据不要保存太长时长;
尽量让数据缓存在数据库服务器的内存中;
触发器表达式:
减少使用min(), max(), avg();尽量使用last(),nodata();
数据收集:
polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active));
数据类型:
文本型数据处理速度较慢;尽量少收集类型为text或string类型的数据;多使用类型为数值型数据;
zabbix服务器的进程调优:
(1) 服务器组件的数量;
alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper,
configration syncer, ...
StartPollers=60 被动方式时增大并发量
StartPingers=10
StartHTTPPollers 监控web时启用
...
StartDBSyncer=5
...
HousekeepingFrequency 清理过期数据,不宜过于频繁
MaxHousekeeperDelete 每次最多可清理的数据
CacheUpdateFrequenty 缓存更新的频率
如果内存足够大缓存空间尽量调大
(2) 设定合理的缓存大小
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M
(3) 数据库优化
分表:
history_* 保存历史数据的表
trends* 保存趋势的表
events* 保存事件的表
Maintenance维护区间,维护区间内不采集数据
其它解决方案:
grafana:展示
collectd:收集
influxdb:存储
grafana+collectd+influxdb
prometheus:
exporter:收集
alertmanager:
grafana:展示
openfalcon 重量级的监控系统,监控系统比较美观
Zabbix share