硬件-->系统-->应用
监控:
1.发现故障
2.监控业务系统业务流量
监控的两种方式:
1.有agent
2.无agent
监控应该具备的主要功能
1.周期性的数据采集
被监控的主机安装agent
不须要安装agentless
时间流数据数据项称之为一个监控的指标数据
监控模板,调用模板工具
发现能力:当增长设备时,能够自动归入监控中
同步内置接口,来发现监控系统,从而完成自动发现新增长的主机
添加主机的方式:1.手动添加。2.自动发现
监控数据的类型的设定:1.手动添加。2.使用模板
2.数据 存储
数据存储位置,能够自主研发,也可使用已存在在数据库,Zabbix使用的存储为MySQL或者PGSQL,存储容易成为瓶颈
3.定义阈值,发出警告
合理区间,每一项参数都须要定义一个合理的数据,超过该数据则发出警告,定义表达式,计算结构知足条件才是危险,不知足才认为正常。告警须要经过邮件等,
远程命令或脚本完成自我修复、发出警告
4.可视化
将数据流生成图标展现出来
1.cacti:采集数据,展现,存储,告警很差,结合nagios
通过定义crontab任务+snmp+rrd(roundrobin database)数据库
nagios:只报警,符合就报警,不符合就丢弃
2.Zabbix:采集数据,存储数据,告警功能,可视化,可以使用grafana作可视化
3.statsd(数据采集)+influxdb(时序数据库)+grafana
4.prometheus+grafana
数据采集的方式,采集通道
1.agentless:ssh、telnet
2.agent:Zabbix agent、exporter、snmp(通常用于路由器)php
架构体系:
Zabbix Server:负责接收agent发送的报告信息的核心组件,全部位置,统计数据及操做数据均由次组件进行
Zabbix Database:专用于存储全部的配置信息,收集信息等
Zabbix web GUI:一般与Server运行在同一台主机上,用来展现数据和配置监控项
Proxy:可选组件,用于分布式监控系统,代理收集监控信息,而后交给Zabbix Server
Aent:部署在被监控主机上,负责手机本地数据并发往Server或者代理端
工做架构
Zabbix Poller:周期性的获取监控服务器
poller--->监控项--->触发器-->触发时间--->行为:1.条件 2.操做 :1.远程命令 2.报警
1.主机添加到zabbix
2.定义指标项
3.定义触发器
4.定义事件
5.处理动做html
zabbix逻辑组件: 主机组 主机 监控项(item) key:实现获取监控的目标上的数据的命令或脚本的名称; 应用(application):同一类监控项的集合; 触发器(trigger):表达式;PROBLEM, OK; 事件(event): 动做(action):由条件(condition)和操做(operation)组件; 媒介(media):发送通知的通道; 通知(notification): 远程命令(remote command): 报警升级(): 模板(template):快速定义被监控主机的各监控项的预设项目集合; 图形(graph):用于展现历史数据或趋势数据的图像; 屏幕(screen):由多个graph组成
功能:1.采集数据、2.存储、3.定义阈值、4.可视化
安装方式和基本配置而且启动服务
1.下载zabbix的仓库java
[root@tomcat2 ~]# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
2.安装zabbix等相关软件包,由于这里须要使用mysql数据库,因此直接安装node
[root@ansible ansible]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
3.配置MySQLpython
[root@tomcat2 ~]# vim /etc/my.cnf.d/server.cnf [mysqld] log_bin=mysql-bin innodb_file_per_table=ON skip_name=resolve=ON max_connections = 20000 innodb_buffer_pool_size = 256M [root@tomcat2 ~]# systemctl start mariadb [root@tomcat2 ~]# mysql mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password'; mysql> quit;
4.配置zabbix_server.confmysql
DBPassword=password #若mysql就在本地,则只须要修改者一处配置便可 ----------------------------------若数据库不在本地 # SourceIP= #监听ip LogFileSize=0 #日志文件大小 # DBHost=localhost #数据库主机地址 DBName=zabbix #数据库名 DBUser=zabbix #zabbix数据库的用户名 DBPassword=centos #数据库密码
5.导入数据文件linux
[root@tomcat2 ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.10/create.sql.gz | mysql -uzabbix -p zabbix #其中-p 后面是跟的数据库名,不是密码,若须要直接给密码,则-p密码,注意:-p和密码之间不能有空格
6.修改/etc/httpd/conf.d/zabbix.confios
php_value date.timezone Asia/Shanghai #修改为正常时区,不然在初始化时会有问题
7.http://主机IP地址/zabbix/ 格式化便可,用户名密码默认为Admin zabbixweb
配置/etc/zabbix/zabbix_agent.conf文件,须要受权才能够被监控,如果zabbix本机,则直接启动服务便可
接口:
ZIB、snmp、JMX(jvm虚拟机监控)、ipmi(inter智慧平台接口,在硬件级接口)
item:指标项指某一特定指标数据,数据流生成时有特定的命令获取到的时间序列数据
指标:不断变化的数据数列
指标项:key+执行命令组成
获取数据
手动添加配置监控主机
1.经过zabbix-agent
配置被监控端服务器sql
[root@tomcat1 yum.repos.d]# vim /etc/zabbix/zabbix_agentd.conf Server=192.168.1.149 [root@tomcat1 yum.repos.d]# systemctl start zabbix-agent.service
建立主机过程
各个选项的意思
通常在局域网内部须要加密,只有在跨网络在须要加密,加密浪费系统资源
资产清单配置
添加监控项:Applications监控组 items监控项,能够在key中传递参数,如system.cpu.load[percpu,avg1],在[]添加参数便可
能够手动测试须要那幢zabbix-get
zabbix-get -s 采集数据地址 -p PROT -k ”system.cpu.switches“
使用模板:内建模板,也能够在GitHub中找
告警
定义action须要在系统级别进行定义:
conditions(条件),一般是event产生,能够是多个条件
operations(操做):
remote command(远程命令)或send message(发警报),能够警报升级
传递消息:media(信道)和zabbix的用户或zabbix group,告警消息的收件地址,有与消息传递信道相匹配的收件地址
分布式监控系统
node:有单独的监控功能,数据库,一段时间后 同步给主server,若server故障,可当单独的监控使用,2.2版本之后被删除
proxy:只是代理访问数据,有数据库,代理无需配置,,数据库为临时存储,不会持久存储,须要周期性的同步server端配置
事件的定义
发送报警信息时,须要指定zabbix的用户,定义该信道收件人所须要的收件地址
发消息
1.定义信道
2.定义针对信道对应的收件地址
定义信道
定义zabbix用户与此信道匹配的收件地址
脚本存放位置:AlertScriptsPath=/usr/lib/zabbix/alertscripts/
参数:收件人,信息主体,正文
调用脚本相关
1.传递信息的通道
Eamil
Script:报警脚本,脚本存放路径:/usr/lib/zabbix/alertscripts/
zabbix服务器在调用脚本时,会想其传递三个参数
$1:经由此信道接收信息的目标;
$2:subject
$3:body
zabbix 3.0以后的版本,此三个变量定义为内部宏:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2.收件地址
3.脚本
#!/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])
执行自定义脚本前提
在agent须要完成的配置:
(1) zabbix用户拥有所须要的管理权限;
编辑/etc/sudoers文件,注释以下行;
Defaults requiretty
添加以下行:
zabbix ALL=(ALL) NOPASSWD: ALL
(2) agent进程要容许执行远程命令;
编辑/etc/zabbix/zabbix_agentd.conf,设置以下配置:
EnableRemoteCommands=1
重启服务生效;
展现接口
Graph:将多个指标定义成一个张图
一个屏幕显示多个图
屏幕轮询设置,slide show
模板定义:能够是模板组,也能够连接其余模板,定义时,和定义主机同样,可是不调用,不生效
导入模板
删除模板等操做注意问题
宏:macro,预设的文本替换模式
级别:优先级别:主机--->模板---->全局
全局:administrator-->General--->Macros
模板:编辑模板--->Macros
主机:编辑主机--->Macros
类型:
内建:{MACRO_NAME},须要查询官方文档
自定义:{$MACRO_NAME}
命名方式:大写字母、数字和下划线
配置:
全局
模板宏
主机宏
监控同一个主机能够打开多路,优先选择agent
配置网络自动发现:
基于网络扫描发现指定网络中在线,而后添加主机
扫描在线主机问题,须要基于主机名来肯定统一主机,而后经过判断某主机上基于哪些服务是否存在等方式来判断是否如今
步骤1.基于主机名和服务扫描在线主机
步骤2 添加主机,增长主机监控模板
步骤3.根据主机之上发现的服务,添加服务模板
主机:主机被发现、主机丢失、主机停机、主机启用
服务:
发现事件
添加网络发现,若是根据agent发现,须要想主机发送key请求
配置被发现的主机
[root@tomcat1 ~]# vim /etc/zabbix/zabbix_agentd.conf Server=192.168.1.149 #指定服务器段IP地址
添加到监控主机
key的定义:
在zabbix.agent.conf端的配置文件上由用户经过UserParameter指令定义key
格式:UserParameter=key,command
实例:不带参数 定义key
UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $3}' UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $4}'
手动获取数据
zabbix_get -s 192.168.1.162 -k "memory.usage.used"
网页调用key须要在key行数据
实例:带能够接受参数的定义key
UserParameter=memory.usage[*],/usr/bin/awk '/^$1/{print $$2}' /proc/meminfo
手动测试
zabbix_get -s 192.168.1.162 -k "memory.usage[参数]"
模板导入完成,必须在每个被监控的主机上配置相对应定义key的文件
web页面监控
监控hiding站点资源下载速度,及页面相应时间,相应代码
1.哪一个页面
web场景(web scenario)每一个应用都定义成一个场景
web页面:每个场景都应该监控哪些页面
内建key:
web.test.in:传输速率
web.test.time:响应时长
web.test.rsocode :响应码
主动监测和被动监测
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
主动检测:相对于agent而言;agent(active),agent向server请求与本身相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
agent端所须要基本配置:
ServerActive= #真正zabbix server端
Hostname= #报告的主机名
HostnameItem= #能够key发现主机名
zabbix自动捕获数据
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
配置过程
SNMP和JMX监控
SNMP:简单网络管理协议,主要用于监控交换机或路由器等
没有采集数据的服务端
linux上实现SNMP须要借助net-snmp程序包
OID:可被采集的数据取一个数字,是一个倒置的树桩结构
基于SNMP监控: SNMP:简单网络管理协议; agent/nms 读(get, getnext)、写(set)、trap(陷阱); 161/udp 客户端 162/udp 管理端 SNMP: v1: 1989 v2c: 1993 v3: 1998 MIB:Management Information Base OID:Object ID Linux启用snmp的方法: # yum install net-snmp提供agent的 net-snmp-utils工具程序 配置文件: /etc/snmp/snmpd.conf 定义ACL .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
JMX,zabbix不能直接去jMX上获取数据,须要配置java-gateway才能够,java-gateway也是服务
tomcat主机设置: 监控tomcat:启用接口 /etc/sysconfig/tomcat或/etc/tomcat/tomcat.conf文件,添加 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" zabbix-java-gateway主机设置: 安装 zabbix-java-gateway程序包,启动服务; zabbix-server端设置(须要重启服务): JavaGateway=172.16.0.70 JavaGatewayPort=10052 StartJavaPollers=5 # 启动多少个子进程完成JMX 添加监控项: jmx[object_name,attribute_name] object name - 它表明MBean的对象名称 attribute name - 一个MBean属性名称,可选的复合数据字段名称以点分隔 示例: jmx["java.lang:type=Memory","HeapMemoryUsage.used"] jmx的详细文档: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
zabbix分布式监控
node:中间代理每个都能独立的工做,拥有数据库,比较重量级,几乎全功能的监控数据库:如今已经不支持
proxy:没有配置,由server端分发给代理,采集到的数据临时存储,同步完成后,就删除,也须要周期性的同步数据
适用:1.负载较大 2.跨机房,由于端口不肯定,因此为了方便在防火墙上单独管理
软件包 zabbix-proxy-mysql
配置步骤:
1.安装zabbix-proxy mariadb-server
2.初始化mariadb等相关信息,而且启动mariadb服务,初始化,建立相关库,受权,而且导入sql脚本
3.更改配置文件
Server=
zabbix server主机地址;
Hostname=
当前代理服务器的名称;在server添加proxy时,必须使用此处指定的名称;
须要事先确保server能解析此名称;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1
4.将被监控端更改成proxy,将proxy改成server,在定义主机时,直接通过代理便可
调优
Database: 历史数据不要保存太长时长; 尽可能让数据缓存在数据库服务器的内存中; 触发器表达式:减小使用min(), max(), avg();尽可能使用last(),nodata(); 数据收集:polling较慢(减小使用SNMP/agentless/agent);尽可能使用trapping(agent(active)); 数据类型:文本型数据处理速度较慢;尽可能少收集类型为text或string类型的数据;多使用类型为numeric的; zabbix服务器的进程: (1) 服务器组件的数量; alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ... StartPollers=60 #多开几个处理请求,和cpu核心有关 StartPingers=10 #多启用几个测试连通性 ... StartDBSyncer=5 #数据同步,有多少个pollers最好配置多少个次选项 ... (2) 设定合理的缓存大小 CacheSize=8M HistoryCacheSize=16M HistoryIndexCacheSize=4M TrendCacheSize=4M ValueCacheSize=4M (3) 数据库优化 分表: history_* trends* events* 其它解决方案: grafana:展现 collectd:收集 influxdb:存储 grafana+collectd+influxdb prometheus: exporter:收集 alertmanager: grafana:展现 openfalcon