zoukankan      html  css  js  c++  java
  • zabbix

    开源监控工具
    zabbix zennos opennms cacti nagios ganglia
    zabbix
    (功能)数据采集-->数据存储-->数据展示和分析-->报警
    数据采集:
    SNMP
    agent
    ICMP/SSH/IPMI
    数据存储:
    cacti:rrd(rrdtools)
    nagios:(默认不保存数据),mysql
    zabbix:mysql/pgsql/oracle
    数据展示(web):
    (获取数据后绘图)
    报警:采集到的数据超出阈值(报警本身不是监控系统自身完成,只是触发外在能够执行报警的媒介)
    mail(smtp)
    Chat Message即时信息
    SMS
    jabber(即时通信协议)
    command execution 命令执行
    SNMP:simple network mangement protocol
    SNMP:工作模式:
    NMS向agent采集数据
    agent向NMS报告数据
    NMS请求agent修改配置
    SNMP组件:
    MIB:mangement information base 管理信息库
    SMI:MIB表示符号
    SNMP协议
    NMS可发起的操作:
    Get GetNext Set Trap
    agent:Respose
    UDP:
    NMS:162
    agent:161
    状态码:
    200:OK 表示客户端请求成功
    400:Bad Required 由于客户端请求有语法错误,不能被服务器所理解
    401:Unauthorized 请求未经授权,这个状态码必须和www-Authorized报头域一起使用
    403:Forbidden 服务器收到请求,但拒绝提供服务,服务器通常会在响应正文中给出不提供服务的原因
    404:NotFound 请求的资源不存在,如输入了错误的URL
    500:Internal Server Error 服务器发生不可预期的错误,导致无法完成客户的请求
    503:服务器当前不能够处理客户端的请求
    --------------------------------------------------------------------------------------
    zabbix采集:
    zabbix agent
    agent(active)
    SNMP
    SSH
    zabbix存储:
    用RDBMS保存(mysql/oracle)
    zabbix展示:
    PHP,web GUI
    zabbix报警:
    报警升级
    确定zabbix监控对象
    手动添加
    自动发现
    hosts(主机),hosts group(主机组)
    item,application ---在线否,主机的资源,服务的连接状况,网络相关统计数据等
    item:key ---在agent端key值不能重复
    graph展示,screen(满屏展示)
    trigger:定义一个数据指标的域值 event(事件):trigger可以生成event
    action:notifiction,operation,condition
    可监控的项:
    CPU:load average,CPU Utilization
    memory:memory utilization,swap/pagefile utilization
    network:network transfer,network error/drop packet
    disk:filesystem utilization,disk I/O
    service:process monitoring,windows server,tcp port connectivity,tcp port response time,DNS monitoring,ntp monitoring
    log:text log,eventlog
    file:file monitoring
    other:perforance counter
    web监控:response time 响应时间
    download speed 下载速度
    response code 响应代码
    avaliability of certain content 获取特定要求的内容
    complex web scenarios with logi and logout capability
    support for http and https
    ---------------------------------------------------------------------------------------
    zabbix常用术语:
    主机
    主机组
    监控项
    触发器
    事件:event ,发生的一个值得关注的事情,如触发器状态转变,新的agent或重新上线的agent自动注册
    动作:只对于特定事件事先定义的处理方法,通常包含操作(如发送通知)和条件(合适执行操作)
    报警升级:发送报警或执行远程命令的自定义方案
    媒介:发送通知的手段或通道,如Email,Jabber,SMS
    通知:通过选定的媒介向用户发送的有关某事件的信息
    远程命令:remote command 预定义的命令可在被监控主机处于某特定条件下时自动执行
    模板:用于快速定义被监控主机的预设条目集合,通常包含了item,trigger,graph,screen,application,以及low-level discovery rule,模板可以直接链接到单个主机
    应用:item的集合
    web场景:用于检测web站点可用性一个 或多个HTTP请求
    Frontend:zabbix的web接口
    item(监控项):仅负责收集数据;某指标对应的数据超出合理范围给相关人员发出警告信息
    trigger(触发器):
    一个触发器只能关联一个监控项,但一个监控项可以同时使用多个触发器;为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能;
    一个触发器有一个表达式构成,定义了监控项所采取的数据的一个阈值;
    一旦采集的数据超出了此触发器定义的阈值,触发器状态会装换为“problem”;当采集的数据再次回归至合理范围是,其状态重新返回到“OK”;
    触发器表达式:
    {<server>:<key>.<function>(<parameter>)}<operator><constant>
    server:主机名
    function:评估采集到的数据是否在合理范围内所使用的函数:
    支持的函数:avg,count(计数),change(改变的值的大小),date(时间),dayofweek(星期*),delta(计算两者间的差值),diff(比较),
    iregexp(基于正则表达式去匹配),last(最后*采集到的值),max,min,nodate(没有采集到数据),now,sum等
    parameter:函数参数:在数值参数前使用#作为前缀,则表示为最近几次的取值
    eg:sum(300)表示300秒内所有取值之和,而sum(#10)表示最近10次取值之和
    avg,count,last,min,max支持使用第二参数,用于完成时间限定:eg:max(1h,7d)表示返回一周之前的1h内的最大值
    operator:操作符:/ * - +(算术运算) < > #(不等于) = &(与) |(或)
    constant:常数值
    示例:{www.magedu.com:system.cpu.load[all,avg1].last(0)}>3
    表示主机www.magedu.com上所有cpu的过去1分钟的平均负载的最后一次取值大于3时将触发状态转换
    last(0)相当于last(#1)
    宏(macros):
    抽象,根据一系列预定义的规则替换一定的文本模式,解释器或编译器在遇到宏是会自动进行模式替换(保存了字符型的数据的变量)
    zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本;内置的宏,如:{HOST.NAME},{HOST.IP}
    支持在全局,模板,主机级别使用用户自定义宏
    宏可以应用在:item keys 和 description,trigger名称和表达式,主机接口IP/DNS以及端口,discovery 机制的SNMP协议的相关信息中
    zabbix server processes:zabbix server端启动的进程
    watchdog:监控所有的进程
    housekeeper:定期清理数据
    alerter:报警
    poller:从被监控端获取数据
    httppoller:监控web页面(如响应时间,下载速速...)的专用poller
    discoverer:发现
    pinger:通过ping探测节点是否在线
    db_config_syncer:数据库的配置同步器
    db_data_syncer:数据库的数据同步器
    nodewatcher:监控节点
    timer:计时器
    escalator:报警升级
    --------------------------------------------------------------------------
    zabbix安装配置:
    (1)安装数据库
    # yum install mariadb-server
    MariaDB [(none)]> create database zabbix default charset utf8;
    MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by'123';
    或MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.1.%' identified by'123';
    MariaDB [(none)]> flush privileges;
    (2)安装zabbix
    # yum install zabbix-server-mysql zabbix-web-mysql zabbix
    # yum install zabbix-server zabbix-agent zabbix-web zabbix-get zabbix-sender
    (3)导入数据库(按顺序导入)
    # mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/schema.sql
    # mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/images.sql
    # mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/data.sql
    在centos7.3上,zabbix3.2版本
    # zcat /usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz |mysql -uzabbix -p123 zabbix
    (4)修改配置文件
    # vim /etc/zabbix/zabbix_server
    ListenPort=10051
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=123
    DBSocket=/var/lib/mysql/mysql.sock
    # service zabbix-server restart
    (5)配置zabbix的httpd子配置文件
    # vim /etc/httpd/conf.d/zabbix.conf
    php_value date.timezone Asia/Shanghai
    # service httpd restart
    【# vim /etc/php.ini
    date.timezone = "Asia/Shanghai"
    (6)浏览器访问,并安装
    1,welcome
    2,Check of pre-requisites
    3,Configure DB connection ---数据库用户名填zabbix,密码填123(前面授权过的),并test connection成功
    4,Zabbix server details ---在name选项填上你zabbix服务器的IP或者主机名
    5,Pre-Installation summary
    6,install
    登陆用户名为:admin 登陆密码为:zabbix (默认)
    (7)zabbix-agent端
    # yum install zabbix-agent zabbix-sender zabbix
    # vim /etc/zabbix/zabbix_agentd.conf
    Server=127.0.0.1 ---zabbix服务器的IP
    ServerActive=127.0.0.1 ---zabbix服务器active check相关
    ListenPort=10050
    Hostname=node1.cluster.com ---设定被监控客户端的名称标识(agent主机名)
    # service zabbix-agent restart
    -----------------------------------------------------------------------------------------
    查看zabbix server 已经定义好的key:(可用的监控项)
    mysql> select key_,type from items;
    (1) 创建监控项(item):
    items有多种类型:
    zabbix-agent:
    工作模式:passive,active
    网卡流量相关:
    net.if.in[if,<mode>]
    if:接口,如eth0
    mode:bytes,packets,errors,dropped
    net.if.out[if,<mode>]
    net.if.total[if,<mode>]
    端口相关:
    net.tcp.listen[port]
    net.tcp.port[<ip>,port]
    net.tcp.service[service,<ip>,<port>]
    net.udp.listen[port]
    进程相关:
    kernel.maxfiles 内核允许打开的最大文件数
    kernel.maxproc 内核允许打开的最大进程数
    cpu相关:
    system.cpu.intr
    system.cpu.load[<cpu>,<mode>] system.cpu.load[percpu,avg1],system.cpu.load[percpu,avg5],system.cpu.load[percpu,avg15]
    system.cpu.num[<type>]
    system.cpu.switches
    system.cpu.util[<cpu>,<type>,<mode>
    磁盘IO相关:
    vfs.dev.read[<device><type><mode>]
    vfs.dev.write[<device><type><mode>]
    vfs.dev.inode[fs,<mode>]
    示例:
    cpu 中断数:
    Name cpu interrupts
    Type zabbix agent
    Key system.cpu.intr
    ...
    历史数据保留时长:采用生成的数据
    历史趋势数据存储周期:每小时的最大值,最小值,平均值。统计
    储存值:
    As is 表示不做任何处理
    delta(speed per second):每秒速率 (这次采集的数据值-上一次数据值)/时间
    delta(simple change):改变的值 (这次采集的数据值-上一次数据值)
    展示值:
    (2) 创建图形(graph):
    (3) 创建触发器(trigger):
    一个trigger只能有一个item,一个item可以有多个trigger
    报警级别:
    Not classified:未知级别,灰色
    Information:一般信息
    Warning:警告信息
    Average:一般故障
    High:高级别故障
    Disater:致命故障
    模拟DDOS攻击:
    # yum install hping3
    # hping ping_IP faster
    动作:
    触发条件一般为事件:
    trigger events:ok-->problem
    Discovery events:zabbix的network discovery 工作时发现主机
    Auto registration events:主动模式的agent注册时产生的事件
    Internal events:item变成不再被支持时,或trigger变成未知状态
    operations:
    send message
    remote command
    配置send message:
    (4) 定义报警方式
    1>定义报警媒介
    name:
    Type:Email,
    SMTP sever:localhost(发邮件的服务器)
    SMTP helo:localhost
    SMTP email:(发件人)
    2>创建用户
    -----------------------------------------------
    自定义监控项:
    server端----item.key值---agent端
    server发送item.key给agent端,agent端接收key后再本地执行key生成的参数结果后返回给server端
    在agent端通过定义某个命令或脚本获取所需的数据,并且返回给server端
    在agent端定义:
    UserParameter
    UserParameter=<key>,<command>
    UserParameter=<key>,<command1>,<command2> --command中只能返回一个值
    示例:
    UserParameter=mysql.ping,mysqladmin -uroot ping |grep -c alive
    执行成功返回值为1,执行失败返回值为0
    # vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=memory.free,/usr/bin/free | awk '/Mem:/{print $4}'
    UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk '/$1:/{print $$2}'
    在server端测试:
    # yum install zabbix-get
    zabbix_get [-hV] -s agent_ip -p agent_port [-I IP address] -k key值
    -s --host: 指定被监控端主机名或者IP
    -p --port:客户端端口,默认10050
    -I --source-address:指定源IP,写上zabbix server的ip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
    -k --key:你想获取的key
    # zabbix_get -s agent_ip -k "memory.free"
    # zabbix_get -s 192.168.1.114 -k "memory.usage[MemTotal]"
    # zabbix_get -s 192.168.1.114 -k "memory.usage[Buffers]"
    # zabbix_get -s 192.168.1.114 -k "memory.usage[MemFree]"
    创建监控项:
    key值:memory.usage[MemTotal]
    key值:memory.usage[Buffers]
    key值:memory.usage[MemFree]
    # zabbix_get -s 192.168.1.114 -k "net.if.out[eth0]"
    ---------------------------------------------------------------------------------
    监控nginx
    nginx status 开启状态页面方法:
    server {
    ...
    location /status {
    stub_status on;
    access_log off;
    allow 192.168.1.112; #允许访问的IP
    allow 127.0.0.1;
    deny all;
    }
    }
    状态页面各项数据的意义:
    active connections ----当前nginx正在处理的活动连接数
    serveraccepts handled requests ----总共处理了*个连接,成功创建*握手(证明中间没有失败的)
    总共处理了*个请求(平均每次握手处理了*个请求)
    reading ----nginx读取到客户端的Header信息数
    writing ----nginx返回给客户端的Header信息数
    waiting ----开启keep-alive的情况下,这个值等于:active-(reading+writing),
    表示nginx已经处理完正在等待下一次请求指令的驻留连接
    # vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=Nginx.active[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
    UserParameter=Nginx.reading[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
    UserParameter=Nginx.writing[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
    UserParameter=Nginx.waiting[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
    UserParameter=Nginx.accepted[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ ]+[0-9]+[ ]+[0-9]+[ ]+[0-9]+/ {print $$1}'
    UserParameter=Nginx.handled[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ ]+[0-9]+[ ]+[0-9]+[ ]+[0-9]+/ {print $$2}'
    UserParameter=Nginx.requests[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ ]+[0-9]+[ ]+[0-9]+[ ]+[0-9]+/ {print $$3}'
    zabbix server端测试:
    # zabbix_get -s 192.168.1.114 -k "Nginx.active[192.168.1.114.80]"
    创建监控项:
    key值:Nginx.accepted[192.168.1.114,80]
    key值:Nginx.reading[192.168.1.114,80]
    key值:Nginx.writing[192.168.1.114,80]
    zabbix存放脚本的位置:(rpm -aq zabbix-server)
    /usr/lib/zabbix/externalscripts
    /etc/zabbix/externalscripts (zabbix-agent端)
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog totalaccess
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 200access
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 202access
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 4xxaccess
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 3xxaccess
    UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 5xxaccess
    基于SNMP监控:
    被监控端:
    # yum install net-snmp
    # vim /etc/snmp/snmp.conf
    ....(类似于zabbix-agent的配置)
    ------------------------------------------------------------------------
    自动发现规则(discovery)
    discovery的前提:
    agent
    agentless
    SNMP
    包含两个阶段:discovery和action
    网络发现:
    基于发现的信息:IP 范围
    服务:FTP,SSH,WEB,POP3,TCP...
    zabbix agent
    SNMP agent
    (1)接口添加:
    (2)配置发现action:
    active -->discoverer:动作+条件+操作
    配置agent 自动注册:(auto-resistration)
    通常用于此前故障的agent重新上线
    也可基于active agent的自动注册机制添加别动检测,通过active agent注册时提供的“ListenIP”和”ListenPOrt“进行
    active -->自动注册:动作+操作
    -------------------------------------------------------------------------------
    web监控
    先定义web方案:包括一个或多个http请求或步骤(step);步骤的执行过程按照预先定义的顺序进行执行
    web监控可以获取到的信息:
    整个web方案所有的步骤step的平均下载速度
    失败的step号
    失败的报错信息
    web方案的具体步骤(step)中,可以按需使用 一下信息:
    该step的下载速度
    response时间
    response状态码
    创建web方案:
    创建应用集application
    创建web:1>方案
    2>步骤step:Name(名称):
    URL :http://192.168.1.114/index.html
    Timeout(超时时间):5
    Requried string:(获取到的[该页面内的某个]字符串)
    Requried status(状态码):200
    方案创建完成后,zabbix会自动在链接的application中添加如下监控项:
    item:Download speed for scenario(下载速度) item key:web.test.in[Scenario,,bps]
    type:Numeric(float)
    Failed step of scenario <Scenario> (错误步骤) item key:web.test.fail[Scenario]
    type:Numeric(unsigned)
    Last error message of scenario <Scenario>(错误信息) item key:web.test.error[Scenario]
    使用时需将Scenario和step替换为具体的名称(Scenario为web方案名称)
    查看监控的web:monitoring-->web
    创建触发器,报警
    ----------------------------------------------------------------------------------------
    分布式监控
    proxy 和 node
    zabbix 三种架构
    server-agent
    server-node-agent
    server-proxy-agent
    两种方案:
    使用代理(proxy):用于本区域数据收集,并将数据发送给server
    使用节点(node):提供完整的zabbix server用以建立分布式监控中的层级
    proxy模型:(仅负责收集数据并发送给master,不监控)
    只有一个proxy的daemon进行,proxy也有自己的数据库(而且不能与master的数据库相同),但其数据库只会保留一定的时间,
    与master server端通信是将一批信息打包后发送到master端,mater将这些数据存放到自己的数据库
    特性:所有的配置变更修改只能在zabbix server端操作;
    proxy 不会向server端同步configuration,只会接收;
    proxy的数据库定时将数据传送给server,proxy本地数据只保存最近没有发送的数据;
    node模型:
    本身相当于一台zabbix server,有完整的web页面,完整的数据库,将数据源源不断的发送给master server端
    特性:解决host过多时单台zabbix server面临的性能瓶颈问题;
    使用多个instance;每个instance是独立的一套zabbix,有自己的database和frotend;
    支持热插拔;
    node定时给server端发送configuration,history,event;
    server端定时给node发送configuration;
    所有的配置变更只能在node节点操作,不能在server端操作;
    支持树状结构;
    两者的比较:
    master-proxy相比于master-node的优点:
    proxy压力小,数据库只存储一定的时间
    master压力变小,数据库不是源源不断获取,减小IO压力
    架构更清晰,易维护
    --------------------------------------------------------------------------------------
    zabbix-proxy-agent模式
    (1)zabbix-proxy端
    <1>安装软件:
    # yum install zabbix zabbix-proxy zabbix-proxy-mysql
    # yum install mysql(创建数据库,用户并授权)
    导入数据:只需导入schema.sql即可
    <2>修改配置文件
    # vim /etc/zabbix_proxy.conf
    Server=192.168.1.112 ---server端的IP
    Hostname=node3.cluster.com
    DBHost=localhost
    DBName=zabbix_proxy ---proxy自己的数据库名
    DBUser=zabbix_proxy
    DBPassword=123
    # service zabbix-proxy restart
    # lsof -i:10051
    (2)被监控端:
    安装相应的软件
    # yum install zabbix zabbix-agent zabbiz-sender
    修改配置文件
    # vim /etc/zabbix/zabbix_agentd.conf
    Server=192.168.1.115 ---Proxy服务器的IP
    ServerActive=192.168.1.115 ---proxy服务器的IP
    ListenPort=10050
    Hostname=node5.cluster.com ---设定被监控客户端的名称标识(agent主机名)
    # server zabbix_agent restart
    (3)在zabbix server端监控:
    添加监控主机
    自动发现
    手动添加
    添加监控主机时:Monitored by proxy:(填写proxy的IP)
  • 相关阅读:
    武道之路-炼体期五重天中期
    武道之路-炼体期五重天
    武道之路-炼体期四重天巅峰
    修改Oracle监听端口
    完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
    Create Linked Server SQL Server 2008
    Oracle:ODP.NET Managed 小试牛刀
    jquery ajax跨域请求webservice webconfig配置
    oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
    oracle 11g 一直提示 严重: 监听程序未启动或数据库服务未注册到该监听程序
  • 原文地址:https://www.cnblogs.com/skyzy/p/9226798.html
Copyright © 2011-2022 走看看